- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【2017年整理】8位有符号数的表示范围
为什么8位有符号数的范围是“-128 至 +127
这是一个困惑了我几年的问题,它让我对现在的教科书和老师极其不满,从我
N年前开始摸电脑时,就几乎在每一本C++教科书上都说,8 位有符号的取值范围
是-128~+127,为什么不是-127~+127呢,后来的java,int 的聚值范围,再32 位计
算,-2^31 ~ +2^31-1,可是,却从来没有任何一本教科书或一个老师比我解释过这个
问题。原因没有在工作上或者是什么地方直接遇到它,所以我也一直忽略它,但心
里总是有一根刺.直到刚才!!!!
就是刚才,无聊之极,在看汇编的书时,又遇到它了,但一如以往,书上直接地,有心
地,明显地绕过了这个问题,真是可恶啊.
几经周折,终于把它搞清楚了:
其实它是计算机底层为了实现数值运算而决定的,涉及非常基础的源码,反码,补码知识,一般用不上,但是计算机考试除外。
用2^8来表示无符号整数的话,全世界的理解都是0 - 255了,那么,有符号呢? 用
最高位表示符号,0 为+,1 为-,那么,正常的理解就是-127 至+127 了.
这就是原码了,值得一提的是,原码的弱点,有2 个0,即+0 和-0,还有就是,进行异
号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,
最后运算结果的符号还要与大的符号相同.
于是乎,反码产生了,原因略,反正,没过多久,反码就成为了过滤产物,也就是,后
来补码出现了.
补码的知识不说述,只说有关+127 和-128 的.
官方的定义[-2^(n-1),2(n-1)-1],补码的0 没有正负之分.原因呢?没有一本书上
有说,这也是我这么火的原因,但通过思考,google,再思考,很快找到答案:
首先,难不免干点白痴般地事情,穷举一下...
正数,原码跟补码一样
+127, 0111 1111
+126, 0111 1110
+125, 0111 1101
+124, 0111 1100
+123, 0111 1011
+122, 0111 1010
...
+4, 0000 0100
+3, 0000 0011
+2, 0000 0010
+1, 0000 0001
0, 0000 0000 (无正负之分)
下面是负数了,值,原码,符号位不变其它取反,+1
-1, 1000 0001, 1111 1110, 1111 1111
-3, 1000 0011, 1111 1100, 1111 1101
-4, 1000 0100, 1111 1011, 1111 1100
-5, 1000 0101, 1111 1010, 1111 1011
-6, 1000 0110, 1111 1001, 1111 1010
-7, 1000 0111, 1111 1000, 1111 1001
-8, 1000 1000, 1111 0111, 1111 1000
-9, 1000 1001, 1111 0110, 1111 0111
-10, 1000 1010, 1111 0101, 1111 0110
-11, 1000 1011, 1111 0100, 1111 0101
-12, 1000 1100, 1111 0011, 1111 0100
-13, 1000 1101, 1111 0010, 1111 0011
-14, 1000 1110, 1111 0001, 1111 0010
-15, 1000 1111, 1111 0000, 1111 0001
-16, 1001 0000, 1110 1111, 1111 0000
-17, 1001 0001, 1110 1110, 1110 1111
...
-24, 1001 1000, 1110 0111, 1110 1000
...
-99, 1110 0011, 1001 1100, 1110 0100
...
-124, 1111 1100, 1000 0011, 1000 0100
-125, 1111 1101, 1000 0010, 1000 0011
-126, 1111 1110, 1000 0001, 1000 0010
-127, 1111 1111, 1000 0000, 1000 0001
看出点什么了没有?
如果没有,那么,给个提示, 再继续下去,下一个补码是什么呢?
当然是
-128, 先略过,再略过, 1000 0000
-127 补码是 1000 0001 还可以在减去1 1000 0000 -128
1000 0000,那么,它的原码是什么呢?
从补码求原码的方法跟原码求补码是一样的
先保留符号位其它求反: 1111 1111, 再加1:11000 0000, 超过了8 位了
对,用8
文档评论(0)