今天突然发现自己对于负数的二进制的表示有点迷糊,吓得赶紧查了查资料,简单整理如下几点:
一,对与有符号的数而言
1,二进制的最高位是符号位:0表示正数,1表示负数,其余的位代表数值位,表示具体的二进制数值;
2,正数的原码,反码,补码都一样;
3,负数的反码 = 它的原码符号位不变,其他位取反(0->1,1->0);
4,负数的补码 = 它的反码 + 1;
5,在计算机运算时,都是以补码的方式来运算的;
6,大多数数字都是默认有符号的。
二,对于无符号的数而言
与有符号数的最大区别在于:二进制的最高位不是符号位,不再表示数的正负性,其二进制数全部表示具体的数。
例子: 计算1 + (-2)的值。(默认为有符号的,在32位机下)
(1)1的补码为就是其原码:0000 0000 0000 0001
(2)-2的补码 = 它的原码的反码+1
-2的原码:1000 0000 0000 0010
-2的反码:1111 1111 1111 1101
-2的补码:1111 1111 1111 1110
(3)1 + (-2) =
0000 0000 0000 0001
+ 1111 1111 1111 1110
= 1111 1111 1111 1111
设1 + (-2)的结果值为X。,则上式是X的二进制补码。
(4)X的首位是1,表示这是X是一个负数,补码不等于原码,需要从补码反求其原码
X的补码减一得X的反码:1111 1111 1111 1110
X的反码求反得X的原码:1000 0000 0000 0001
由此可以得出X的值为:-1,与1 + (-2) =(-1)的值相等。