简单记一下原码,反码,补码的概念

179 阅读3分钟

基础概念(存储单位):

bit:二进制的一位代表一个bit(比特)。它的简写为小写字母 “b”

Byte:一个英文字符通常是一个字节,一个字节代表4个bit。它的简写为大写字母 “B”

原码,反码,补码的长度是字型数据。如果他的字形数据占8位,原码,反码,补码的长度就是8。(不重要)

开始正文

暂定为长度为16个比特

符号位为长度最左侧,0为正数,1为负数

原码

原码即 整数转化为二进制的表现形式

例:1的二进制是1,2的二进制是10

1的原码[0000 0000 0000 0001]
2的原码[0000 0000 0000 0010]
-2的原码[1000 0000 0000 0010]

反码

正数的反码即原码 负数的反码即原码 “除去符号位以外” 其他位置取反

例:

1的原码[0000 0000 0000 0001]
1的反码[0000 0000 0000 0001]

-1的原码[1000 0000 0000 0001]
-1的反码[1111 1111 1111 1110]

补码

正数的补码即原码 负数的补码即反码加一

-1的反码[1111 1111 1111 1110]
-1的补码[1111 1111 1111 1111]

在计算机内存中,整数一律采用补码的形式来存储。这意味着,当读取整数时还要采用逆向的转换,也就是将补码转换为原码。将补码转换为原码也很简单:先减去 1,再将数值位取反即可。

计算机计算加减法时

1+1
=[0000 0000 0000 0001]补 + [0000 0000 0000 0001]
=[0000 0000 0000 0010]补
=[0000 0000 0000 0010]反
=[0000 0000 0000 0010]原
=2

1-1
=1+(-1)
=[0000 0000 0000 0001]补 + [1111 1111 1111 1111]
=[0000 0000 0000 0000]补
=[0000 0000 0000 0000]反
=[0000 0000 0000 0000]原
=0

为什么要用补码计算,先看下边的展示

+0原码: [0000 0000 0000 0000]    -0原码: [1000 0000 0000 0000]
+0反码: [0000 0000 0000 0000]    -0反码: [1111 1111 1111 1111]
+0补码: [0000 0000 0000 0000]    -0补码: [0000 0000 0000 0000]

由上可见,+0和-0的原码和反码表示并不相等,这是不对的。因为 -0 = +0

所以,你懂了的吧