原码反码补码
Posted 爱做梦的鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原码反码补码相关的知识,希望对你有一定的参考价值。
在计算机中,负数都是以补码的形式存放的,
正数的原码、反码、补码完全一致。
- 原码:指的是正数的二进制或负数的二进制,
负数的二进制(原码),其实就是在正数的二进制的最高位前面加一个符号位 1。 作者:LI_IR https://www.bilibili.com/read/cv11272331 出处:bilibili
- 求反码:对于正数,其反码和原码相同;对于负数,则将其原码的符号位 1 保持不变,而将其他位按位取反(即将 0 换为 1,将 1 换为 0)。
- 求补码:对于正数,其补码和原码相同;对于负数,负数的补码是反码加 1。若对一补码再次求补,就又得到了对应的原码。 作者:LI_IR https://www.bilibili.com/read/cv11272331 出处:bilibili
计算负数的补码有两种方法:
- 负数所对应的正数的补码的相反数:先求负数所对应的正数的二进制,然后再取反,再加 1,就得到了负数的补码,这也是负数在计算机中的存储形式。 作者:LI_IR https://www.bilibili.com/read/cv11272331 出处:bilibili
- 负数的补码是反码加 1
第一种方法计算示例
- 1 的原码、反码、补码为 0000 0001
- 取反为 1111 1110
- 加 1 为 1111 1111, 计算机存负 1 的形式
第二种方法计算示例
- -1 的原码为 1000 0001
- -1 的反码为 1111 1110
- -1 的补码为 1111 1111,计算机存储负 1 的形式
这两种方式计算结果一致是因为,正数的原码取反会把符号位上的 0 反成 1,而负数计算反码,符号位上的 1 保持不变
-128 的二进制是 110000000(注意:-128 占了 9 位,超出了一个字节),然后按照上面的规则求其补码,先求反码(符号位保持不变,其他位取反),再加 1,结果为 110000000,发现与原来一样,若用一个字节来存储,那就是 10000000(把高位给截掉),也就是说,-128 在计算机存储时是以 10000000(补码)的形式存储的,在计算机中它就表示-128。 作者:LI_IR https://www.bilibili.com/read/cv11272331 出处:bilibili
以上是关于原码反码补码的主要内容,如果未能解决你的问题,请参考以下文章