【计组】总结为什么8位有符号整数的范围是-128到+127

在这之前需要清楚计算机表示十进制数的三种机器码:
1、原码 最高位为符号位,其余为对应数值的绝对值的二进制数值表示;
2、反码 最高位为符号位,正数的反码=它的原码,负数的反码=符号位+原码对应的其他位数取反;
3、补码 最高位为符号位,正数的补码=它的原码,负数的补码=它的原码取反+1。
其中,符号位“0为+,1为-”。

8位无符号整数在计算机里表示为0000 0000-1111 11111,范围是[0,27 -1],没有啥问题。8位有符号整数范围是[-27,27 -1],原码0111 1111,可以表示的最大正数是+127,也没啥问题,但是按道理可以表示的最小负数应该是 1111 1111,-127,怎么可以表示的最小负数是-128呢?
这是因为计算机采用了补码进行数值计算,从个数上可以这么解释:为了方便数值计算,计算机采用了补码,8位可以有28也就是256个补码,从0000 0000到0111 1111的补码用来表示0-127,如下:

正数补码跟原码一样 :
+127, 0111 1111
+126, 0111 1110
+125, 0111 1101
+124, 0111 1100
+123, 0111 1011
+122, 0111 1010

+4, 0000 0100
+3, 0000 0011
+2, 0000 0010
+1, 0000 0001
0, 0000 0000 (无正负之分)

已经表示了128个数。
从1000 0001到1111 1111的补码用来表示整数-127到-1:

负数,原码,反码,补码(8位表示)分别如下:
-1, 1000 0001, 1111 1110, 1111 1111
-2, 1000 0010, 1111 1101, 1111 1110
-3, 1000 0011, 1111 1100, 1111 1101
-4, 1000 0100, 1111 1011, 1111 1100
-5, 1000 0101, 1111 1010, 1111 1011
-6, 1000 0110, 1111 1001, 1111 1010
-7, 1000 0111, 1111 1000, 1111 1001
-8, 1000 1000, 1111 0111, 1111 1000
-9, 1000 1001, 1111 0110, 1111 0111
-10, 1000 1010, 1111 0101, 1111 0110
-11, 1000 1011, 1111 0100, 1111 0101
-12, 1000 1100, 1111 0011, 1111 0100
-13, 1000 1101, 1111 0010, 1111 0011
-14, 1000 1110, 1111 0001, 1111 0010
-15, 1000 1111, 1111 0000, 1111 0001
-16, 1001 0000, 1110 1111, 1111 0000
-17, 1001 0001, 1110 1110, 1110 1111

-24, 1001 1000, 1110 0111, 1110 1000

-99, 1110 0011, 1001 1100, 1110 0100

-124, 1111 1100, 1000 0011, 1111 1101
-125, 1111 1101, 1000 0010, 1000 0011
-126, 1111 1110, 1000 0001, 1000 0010
-127, 1111 1111, 1000 0000, 1000 0001

又表示了127个数,8位可以有256个补码,而上面用了255个,表示了255个数值,还有一个补码没有用到,它是1000 0000,它不表示-0,补码里规定0没有正负之分。那这个补码对应哪个数值?
从列举的规律可以看出,整数-127到-1 与 补码1000 0001到1111 1111对应,那么补码1000 0000应该是-128;但是它为什么不用来表示+128呢?按道理1000 0000不是-0,从0到+127对应补码0000 0000到0111 1111。那1000 0000也可以是+128啊!而且也能说得过去:
对+128计算原码得:0 1000 0000,减一:0 0111 1111,取反得+128补码:0 1000 0000,即1000 0000(8位表示,符号位0溢出了)
但是规定了最高位是符号位,所以1000 0000用来表示-128更合理,这样更容易实现!
总之8位可以有256个补码,-127到+127用了255个补码来表示,还有一个补码1000 0000用来表示-128,所以8位带符号整数的范围是-128到+127。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值