前提:1.本文使用8位二进制表示
2.主要是定点数的的使用
3.正数的原,反,补码相同
正文:一.整数
8位二进制原码的表示范围:-127~+127
8位二进制反码的表示范围:-127~+127
8位二进制补码的表示范围:-128~+127
-(2^7-1)= -127 原码:1111 1111 补码:1000 0001
2^7-1= +127 原码:0111 1111 补码:0000 0001
在原码,反码中0分为 +0 和 -0;
【+0】原=0000 0000
【-0】原=1000 0000
在补码的表示法中,0只有一种表示形式:
【+0】补=0000 0000
【-0】补=1111 1111 + 1=1 0000 0000(由于受到设备字长的限制,最后的进位的丢失)
所以有【+0】补=【-0】补=0000 0000
提问:为什么补码中会多出现-128的数字?
答:首先【-0】原=1000 0000 在 补码在中由于字长的限制使得【+0】补=【-0】补=0000 0000
其次 原,反,补码的二进制范围都为0111 1111到1111 1111
【-0】在补码中的二进制丢失,但是1000 0000任然存在,那么应该1000 0000应该代表什么呢?
再来说一说 -128 的机器码
原码:1 1000 0000
反码:1 0111 1111
补码:1 1000 0000,截取低8位即1000 0000,表示的是一个负数。
补码正好也是1000 0000,于是便填充了【-0】的补码 1000 0000 的空位
于是补码的范围便是 -128 ~ +127
(因本人水平有限,不足之处在所难免,敬请各位大佬指正。)