大一大学计算机听懵了求回答

在原码和补码中最高位表示的是正负嘛 那表正负的0和1应该不参与计算 那为什么 补码中的10000000可以表示-128?

负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
10000000 - 00000001 => 11111111 => 10000000 => 128

1.假设用8位来表示一个二进制数,能表示的无符号数的范围就是0-255,一共256个数,就是2**8。而八位表示的有符号数的范围就是-128到127。最高位为符号位,1表示负,0表示正,非负数的范围就是0-127。对应二进制00000000-01111111,负数的范围是-128到-1对应的二进制就是10000000-111111111.
2.而为什么要这么规定,你会发现10000000+1就是10000010就是-127,一直加1最后加到-1刚好8位全1,是不是就看着很顺眼.假如用10000001表示-128加127就超出8位了
3.补码:正数的补码和原码一样,而负数的补码是原码按位取反再加1,比如-1的原码10000001,按位取反11111110(这里最高位符号位不动),再加1就是八位全1。
4.补码的引入是为了方便运算,比如2-3,稍后发张照片
5.推荐阅读佩措尔德的《编码》

img


不知道我解释清楚没,以前我也有这个疑问,希望能帮到你。补码的原理有点像小学的时候计算13-5,个位减不够所以要借位,在十位借一个10减5得⑤加上3得8。