对于多位的二进制数,要考虑正数和负数表达问题。一般用拿出最高位作为正负数的代表:0表示该数是正数,1表示为负数。例如,十进制的2,在8位长度的二进制中表达为
而-2则表达为
因此,8位二进制的范围为
-127~-0~+0~127(十进制)=11111111~00000000~10000000~01111111(二进制)。
显然,-0和+0不能都作为零。
负数的补码范围是正数的原码取反加一。原码是0000 0000~0111 1111(+0~+127),所以负数的范围应当是1 0000 0000~1000 0001,其中,1 0000 0000表达的是+0的补码,超出了8位二进制数长度,9位二进制代表的是128。1000 0001的原码是+127,将最高位作为符号位,可以理解为-1。同样,1000 0010的原码是+126,代表的含义是-2。(www.xing528.com)
对负数[1]000 0000 ~[1]111 1111(-0~-127)(注:[1]代表符号位,表示为负数)求补码,符号位不参与运算,从而得到负数的补码范围是[1]000 0000 ~[1]000 0001。而[1]000 0001作为补码,其原码是[1]111 1111(-127),依次往前推,可得到原码-1的补码为[1]111 1111。即,-127~-1的补码范围是[1]111 1111~[1]000 0001,不包括[1]000 0000,也就是说[1]000 0000是空着没用的。
这样,考虑到只有8位字长,而不是9位二进制位长,因此,可以把[1]000 0000理解为-128,而避免要用1 0000 0000(9位长度)代表-128。
另一方面,(-127)+(-1)=[1]111 1111+ [1]000 0001=[1]000 0000(注:[1]代表符号位,表示为负数,两个负数相加,符号位不参与运算),也验证了[1]000 0000 可以作为-128。因此,-0就是-128。+0仍代表0。
可见,8位二进制的范围为-128~0~127,即[-128~127]。
同理,n位二进制数表达的范围是[-2n,+2n-1],而不是[-2n,+2n],也不是[-2n-1,+2n-1]。这里的n位不包括符号位。
或者,n位二进制数表达的范围是[-2n-1,+2n-1-1],n包括符号位。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。