为什么16个2进制表示一个整数,带符号整数范围为什么是: -2^15~2^15-1 之间?

最最关键的是那个-1是怎么出来的?

采用16个2进制位表示一个“字”,是从上世纪60年代以来的小型计算机开始,流行的一种存储器规格。这种规格,如用十六进制表示,正好是四位。
16个2进制位的取值范围,就是0000 0000 0000 0000 ~1111 1111 1111 1111,相当于十进制0~65535。
也就是0~2^16-1。

要表示有符号数的话,必须留出一个符号位。以最高位位0表示正数的话,只剩下15位表示其绝对值了,即0000 0000 0000 0000 ~ 0111 1111 1111 1111,相当于十进制0~32767。
也就是0 ~ 2^15-1。

然后,我们再看负数。
假如采用“原码表示法”,即用符号位1表示负号,此外的15位表示绝对值的话,可以表示
-(2^15-1) ~ 0。
但是这样一来,对于0,就出现了两种形式:正0和负0。

而且,“原码表示法”的缺点还不仅仅在于出现了两种0。

“原码表示法”的更大缺点是:对于加法和减法,需要根据两个运算数的正负号、绝对值谁大谁小,来分情况设计计算的规则。而有符号数和无符号数的计算又不一样。因此,CPU中运算器的逻辑电路必须要要大大复杂化。

所以,现在的计算机,对有符号数大多不采用“原码表示法”而采用“补码表示法”。
补码表示法的特点是:采用“机器加”、“机器减”的算法,运算逻辑对正负数都一样了,CPU内部的电路结构简单了很多。

这里所谓的“机器加”、“机器减”,就是说,运算器完全按无符号数的加减来设计,同时,最高位向上的进位略掉,最高位从上面的借位也略掉。也就是说:最高位“进位白进,借位白借”。当然,CPU内部这些进位借位信息并未丢掉,而是留作溢出判断的依据之一。

按照“机器加”、“机器减”的规则,我们会知道:
1111 1111 1111 1111加上0000 0000 0000 0001,会得到0000 0000 0000 0000(最高位往更上面的进位“白进”)。
而0000 0000 0000 0000 减去 0000 0000 0000 0001,会得到1111 1111 1111 1111(最高位从更上面的借位“白借”)。

说有符号算术数的“补码表示法”之前,先解释一下“补码”一词。
“补码”一词有两种用法,意思有所不同。

一个含义是:两个机器代码互为“补码”。定义是:
如果两个机器码的“机器相加”结果是0,就称这两个机器码互为“补码”。例如上面的0000 0000 0000 0001和1111 1111 1111 1111就是互为补码。

在采取第一个含义时,为了和下面的另一个含义区分,有时将这个含义的“补码”一语叫做“机器补码”。

另一个含义是:有符号算术数的“补码表示法”。这就是上面说的了。
有符号算术数的“补码表示法”定义是:
如果这个算术数是正数,就用这个数本身的二进制代码作为这个数的机器码;如果这个算术数是负数,就用这个数的绝对值的机器码的“机器补码”作为这个负数的机器码。这种表示方法称作“补码表示法”。
采用“补码表示法”时,只要原数值不超出“溢出”的界限,那么,机器码的二进制位的最高位就可以看作符号位。

根据上述规定,可以知道,如果两个有符号数绝对值相等符号相反,那么,他们的“补码表示法”的机器码,一定是互为“机器补码”了。

所以,对机器码执行“机器求补”的操作,恰好相当于对原算术数“乘以负一”。
例如0000 0000 0000 0001和1111 1111 1111 1111互为机器补码,那么,这两个机器码代表的有符号算术数分别是+1和-1.

而1000 0000 0000 0000的机器补码仍然是1000 0000 0000 0000,这个代码只能表示一个数:
-32768(即-2^15)。而+32768不能表示(算溢出)。所以,补码表示法中,负数的表示范围是:
-2^15 ~ -1。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-23
早期的微处理器是16位,每个传输线都有两个状态0 1,如果把最高一位当成符号位。按补码计算,取反加上一。10000000 00000000 就是最小的负数-2的15次方 1111 1111 1111 1111 第一位符号位,1为负数-,按补码计算,取反加一。得一,结果就是-1啦。希望可以帮到你。
给分是王道
第2个回答  2011-10-23
最大的为0111 1111 1111 1111
为了方便计算留给这个原码加1,最后在把这个1减掉,就出现了2^15-1这个式子
第3个回答  2011-10-23
你按原码到补码的计算:
例如 -1
原码 1000 0000 0000 0001
补码 1111 1111 1111 1111
补码 = 原码取反+1
第4个回答  2011-10-23
-2^15~-1个数等于0到2^15-1的个数!
相似回答