【2017年整理】8位有符号数的表示范围.docVIP

【2017年整理】8位有符号数的表示范围.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

love87421 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档