有符号的二进制表示:
补充:
在计算机中,负数以其正值的补码形式表达
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
反码:将二进制数按位取反(0变1,1变0),所得的新二进制数称为原二进制数的反码。
补码:反码加1称为补码。
最左边的看作符号位,为1表示负数,为0表示非负数
(即 有符号的二进制表示较无符号的少了1/2(这里指非负数和负数要各占一半),这就能解释为何
int型取值范围为:-2^31 ~ 2^31-1,而unsigned int(无符号整数型)取值范围为:2^32)
正变负 :各个位数取反再加一
负变正 :各个位数减一再取反(等同于取反再加一)
例:(众所周知,一个整数占四个字节,即四个8比特位)
因此,整数在计算机眼中应该是这样的:
二进制 | 十进制 |
---|---|
00000000 00000000 00000000 00000010 | 2 |
00000000 00000000 00000000 00000011 | 3 |
00000000 00000000 00000000 00000111 | 7 |
00000000 00000000 00000000 00001010 | 10 |
二进制 | 十进制 |
---|---|
11111111 11111111 11111111 11111110(11111111 11111111 11111111 11111101+1) | - 2 |
11111111 11111111 11111111 11111101(11111111 11111111 11111111 11111100+1) | - 3 |
11111111 11111111 11111111 11111001(11111111 11111111 11111111 11111000+1) | - 7 |
11111111 11111111 11111111 11110110(11111111 11111111 11111111 11110101+1) | -10 |
互为相反数的整数的二进制表示形式相加等于零吗?
是的。实际上,二进制中只有0和1的形式,即其表示数只有0,1,-1,相加实质为零
例 : 2 : 00000000 00000000 00000000 00000010
-2 : 11111111 11111111 11111111 11111110 相加为1 00000000 00000000 00000000 00000000(1舍掉)
补充思考 : 在有符号整数的二进制表示中,首位即为符号位,而最高的表示数为 2^31-1(01111111 11111111 11111111 11111111),因此正数符号位为0(包含0(00000000 00000000 00000000 00000000));
而负数二进制为正数补码(正数取反加一),因此符号位为1;
而所能表示数中负数与非负数各占一半,对应的就是首位取0取1的问题