为什么这里表示的补码是-128?只有八位,红色标出的1不应该溢出了吗,为什么红色标出的1还可以表示符号位?黑色标出的1为什么不表示符号位?

为什么这里表示的补码是-128?只有八位,红色标出的1不应该溢出了吗,为什么红色标出的1还可以表示符号位?黑色标出的1为什么不表示符号位?

由于计算机无法识别符号,最好的处理方式就是让符号位也参与运算。
原码在处理负数的时候会出现问题
# 原码计算 1 + -1 = -2
0001 + 1001 = 1010
反码可以解决负数问题,但是会出现-0和0,值都是0,却有两个表示,
# 反码计算 1 + -1 = -0
0001 + 1110 = 1111
# 反码1111转为原码:1000
# 0000和1000分别是0和-0
补码可以解决0的两种表示的问题
# 补码计算 1 + -1 = 0
0001 + 1111 = 1000
# 补码1000转为原码是0000
补码计算会多一个数,1000可以用来表示-8
# 补码计算 -1 + -7 = -8
原: 1001 + 1111
补: 1111 + 1001 = 1000
由于计算上面补计算的时候,有一个进位因为位数限制,展示不出来,所以1000在转换为原码的时候,会出现缺位。实际上应该是由5位的11000转为反码10111,再转为原码11000。
所以补码4位最大值为7,最小值是-8。
上述应用到8位也是一样的道理,最小值-128