有符号字符型取值范围为什么是-128-127?

127我知道,但负数时是111111111是-2^8+……+1=127,怎么是-128,怎么多了一位呀

有符号字符型取值范围是-128-127是因为有符号字符型最高位是符号位,0代表正数;1代表负数。有符号字符型的最大值为01111111,这个二进制值等于2^0+2^1+2^2+2^3+2^4+2^5+2^6=127。

同时在计算机中,数值是以补码形式存储的。正数的补码是其本身;而负数的补码是取反(符号位保持不变),再加1。所以有符号字符型的最小值是10000000 ->(取反) 11111111 ->(加1)10000000=-2^8=-128。

扩展资料:

有符号数的编码方式,常用的是补码,另外还有原码和反码等。用不同二进制编码方式表示有符号数时,所得到的机器数可能不一样,但是真值是相同的。

在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负;其余n-1位为数值位,各位的值可为零或一。当真值为正时,原码、反码、补码数值位完全相同;当真值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-10
范围是 -128至127.
根据补码的几条规定即可推出上述结论:
1 若二进制每位全为0,则表示数0
2 若最高位(即符号位)为0,表示正数
3 若最高位为1, 表示是负数,而该负数的绝对值是多少呢?将每个二进制位(包括符号位)取反加1,得到一个二进制数,将该数看成无符号数,其值就是上述负数的绝对值。

例如,二进制的 10000000 的最高位为1, 所以它表示的是负数。是负的多少呢?我们将其八位全部取反,得到01111111, 然后加1,得到10000000. 将该数看作无符号数,值为128, 故计算机中的10000000表示的是-128

最高位(即符号位)为1的8位有符号数有128个,故可表示128个负数;最高位为0的8位有符号数有128个,但全0的那个表示数0,所以总共只能表示127个正整数。
转载自http://hi.baidu.com/yyvzaxnwshlrvzr/item/d80d91f7ec2a5558c8f337d9
第2个回答  推荐于2017-10-06
根据补码的几条规定即可推出上述结论:
1 若二进制每位全为0,则表示数0
2
若最高位(即符号位)为0,表示正数
3 若最高位为1,
表示是负数,而该负数的绝对值是多少呢?将每个二进制位(包括符号位)取反加1,得到一个二进制数,将该数看成无符号数,其值就是上述负数的绝对值。

例如,二进制的 10000000 的最高位为1, 所以它表示的是负数。是负的多少呢?我们将其八位全部取反,得到01111111,
然后加1,得到10000000. 将该数看作无符号数,值为128, 故计算机中的10000000表示的是-128

最高位(即符号位)为1的8位有符号数有128个,故可表示128个负数;最高位为0的8位有符号数有128个,但全0的那个表示数0,所以总共只能表示127个正整数
相似回答