在原码和补码中最高位表示的是正负嘛 那表正负的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.推荐阅读佩措尔德的《编码》