补码是一种用二进制表示有符号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。补码以有符号比特的二进制数定义。
补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。
为什么补码的0只有一种?
真值
原码
补码
+0
0000 0000
0000 0000
-0
1000 0000
0000 0000
+0
0.0000
0.0000
-0
1.0000
0.0000
补码与原码的关系:补码=原码除了符号位取反+1(补码符号位可以参与运算)
整数 (0000 0000)取反:0111 1111 加1:0000 0000
(1000 0000)取反:1111 1111 加1:0000 0000(进位的1被舍弃,就是取值不再取了)
浮点数 (0.0000)取反:0.1111 加1:0.0000
(1.0000)取反:1.1111 加1:0.0000
为什么八位整数补码可以表示-128,浮点数可以表示-1?
真值
原码
补码
+0
0000 0000
0000 0000
-0
1000 0000
0000 0000
1
0000 0001
0000 0001
2
0000 0010
0000 0010
…
…
…
127
0111 1111
0111 1111
-128
无
1000 0000
-127
1111 1111
1000 0001
-126
1111 1110
1000 0010
…
…
…
-2
1000 0010
1111 1110
-1
1000 0001
1111 1111
或-127-1=1000 0001+1111 1111=1000 0000(进位舍弃)
因为补码的的+0和-0用同一个数表示,因此空出来一个数可以表示-128
真值
原码
补码
+0
0.0000
0.0000
-0
1.0000
0.0000
1/16
0.0001
0.0001
1/8
0.0010
0.0010
3/16
0.0011
0.0011
1/4
0.0100
0.0100
5/16
0.0101
0.0101
3/8
0.0110
0.0110
7/16
0.0111
0.0111
1/2
0.1000
0.1000
…
…
…
15/16
0.1111
0.1111
1
无
1.0000
-15/16
1.1111
1.0001
…
…
…
-3/8
1.0110
1.1010
-5/16
1.0101
1.1011
…
…
…
-1/16
1.0001
1.1111