二进制中的原码、反码和补码的概念

本篇文章介绍了原码、反码和补码的概念,其次介绍了正负数的原码、反码及补码的转换。

机器数与真值

机器数

一个数的二进制表现形式。其中二进制最高位表示正负,1表示负数,0表示正数。比如

5(十进制)-> 00000101(二进制)

-5(十进制)->10000101(二进制)

真值

用“+”、“-”号加绝对值来表示数值的大小,用这种形式表示的数值。比如下面的+5,-5。

5(十进制)-> 00000101(二进制)-> +000 0101=+5

-5(十进制)->10000101(二进制)-> -000 0101 =-5

总结一下,真值是带有正负号的数值,机器数是用0或1来表示正负号的数值。

原码、反码和补码的概念

先说结论:

  1. 正数的原码、反码、补码都相同;
  2. 负数的原码:最高位为1,其余位为真值的绝对值;
  3. 负数的反码:在原码的基础上,符号位不变,其余位按位取反;
  4. 负数的补码:在原码的基础上,符号位不变,其余位取反,最后加1;也就是在反码的基础上加1。

原码

原码:第一位表示符号,其余位表示值。举例说明

+12-> 0000 1100 (原码)

-12-> 1000 1100 (原码)

对应的取值范围就是[1111 1111,0111 1111],范围是[-127,127]

反码

正数的原码、反码、补码都相同;

负数的反码:在原码的基础上,符号位不变,其余位按位取反。举例说明:

+12-> 0000 1100 (原码) -> 0000 1100(反码)

-12-> 1000 1100 (原码) -> 1111 0011(反码)

补码

正数的原码、反码、补码都相同;

负数的补码:比如-12,

  1. -12的原码:1000 1100
  2. 最高位不变,其余位取反:1111 0011
  3. 加一得到补码:1111 0100

这里如果要将负数的补码转为原码,操作方法一样;

  1. -12的补码:1111 0100
  2. 最高位不变,其余位取反:1000 1011
  3. 加一得到原码:1000 1100

关于补码范围为什么是[-128~127]的问题?

这个问题我也没搞懂,可以先看看第二个参考链接,思考一下。

参考链接

https://www.cnblogs.com/red-code/p/6520462.html

https://wenku.baidu.com/view/4d9cfe8b7cd184254a353515.html

上一篇:学习进度(14)


下一篇:索引失效