原文:https://blog.csdn.net/fenzang/article/details/53500852?utm_source=blogkpcl4

首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0~255。计算方法就是二进制与十进制之间的转换。

如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0代表正数,1代表负数,后面7位为数值域,这就是原码定义。这样在现实生活中完全没有问题,但在计算机中就出现了问题。

  1. 数的表示:
    在原码中,0的表示有两种(+0)0000 0000、(-0)1000 0000,这样就产生了编码映射的不唯一性,在计算机上就要区分辨别。然而+0、-0却没有什么现实意义。
  2. 数的运算:
    为了解决上述数的表示问题,我们可以强制把转换后的10000000强制认定为-128。但这又出现了一个新的问题就是数的运算。数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错了。所以原码的符号位不能直接参与运算,必须和其他位分开,这就增加了硬件的开销和复杂性。
    这个时候就要引入补码,补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。反码定义为:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

    • 但为什么要引入补码呢?
    • 以及负数补码定义为什么是相对应的正数原码取反加一?

先解决第一个问题,引入补码是为了解决计算机中数的表示和数的运算问题,使用补码,可以将符号位和数值域统一处理,即引用了模运算在数理上对符号位的自动处理,利用模的自动丢弃实现了符号位的自然处理,仅仅通过编码的改变就可以在不更改机器物理架构的基础上完成的预期的要求。

要解决第二个问题同时理解补码,首先要理解“模”。
模的概念可以帮助理解补数和补码。
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。

例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。

对于计算机,其概念和方法完全一样。n位计算机,设n=8,不讨论符号位, 则所能表示的最大数是11111111,若再加1成为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2^9。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。

接下来就是取反加一的来源:

例如-8,可以看做0-8,即0000 0000 - 0000 1000,小减大,像高位借一,即1 0000 0000 - 0000 1000 = 1111 1000,这个可以看做用模数来减去该数,会得到该数的补数。同时上式也可以看做 (1111 1111 - 0000 1000)+1,即0000 1000 取反加1。

负数补码定义是相对应的正数原码取反加一,这个同负数的反码末尾加一是同样的效果。注意看反码的定义。取反加一是逐位取反,包括符号位。

对一个正数的原码取反加一,得到这个正数对应负数的补码。例如~6=-7,而且加一之后会多出一个八进制补码1000 0000,而这个补码就对应着原码1000 0000,数字位同时当做符号位即-128。

根据以上内容我们就可以来解释八位二进制数的表示范围

八位二进制正数的补码范围是0000 0000 ~ 0111 1111 即0 ~ 127,负数的补码范围是正数的原码0000 0000 ~ 0111 1111 取反加一(也可以理解为负数1000 0000 ~ 1111 1111化为反码末尾再加一)。
所以得到 1 0000 0000 ~ 1000 0001,1000 0001作为补码,其原码是1111 1111(-127),依次往前推,可得到-1的补码为1111 1111,那么补码0000 0000的原码是1000 0000符号位同时也可以看做数字位即表示-128,这也解释了为什么127(0111 1111)+1(0000 0001)=-128(1000 0000)。

总结

在计算机中数据用补码表示,利用补码统一了符号位与数值位的运算,同时解决了+0、-0问题,将空出来的二进制原码1000 0000表示为-128,这也符合自身逻辑意义的完整性。因此八位二进制数表示范围为-128~+127。

参考文章:
补码-百度百科
原码-百度百科

(转)为什么八位二进制数表示范围为-128~+127?相关推荐

  1. 八位二进制数能表示数的范围以及原码、反码和补码含义

    首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果表示无符号整数可以表示0~255.计算方法就是二进制与十进制之间的转换. 如果想要表示有符号整数,就要将最 ...

  2. 为何八位有符号整数的范围是-128~127,而不是-127~128

    八位的带符号的整数,比如JAVA中的byte,c#中的SByte,为什么值域范围都是-128-127而不是-127~128? 事实上,远古时期有些计算机的设计是采用了反码表示有符号数的,因此8位有符号 ...

  3. 关于进制补码的八位取值范围为什么是-128~127和补码-128的求取

    我们求补时不能按照平常的求补码方法来求,如果这样求的话,只会把自己碰的头破血流,所以我们不能将自己的思维固定在原码转反码转补码之上,这样最后求出来的是出问题的. 可以这样,我们将在-128~127里面 ...

  4. 为什么8位二进制的取值范围是-128~127

    我的疑惑 一个字节8位,其中最高位表示正数和负数,0表示正数,1表示负数.所以能够表示-128-+127. 01111111可以表示+127.正数这一段没有问题,负数这一段有两个疑问 11111111 ...

  5. 为什么一个byte的存储范围是-128~127?

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  6. byte的取值范围-128~127原理

    我们都知道byte为8位二进制数据,最高应该是11111111,为255(10进制).但是为什么byte的取值范围为-128~127呢? 因为不管是Int类型还是byte类型,当用二进制定义整数时候, ...

  7. byte的范围为何是-128~127,而不是-127~128?

     一.计算机该怎么做减法?     比如2-1=1,1-1=0.由于种种原因(精力有限,暂不深究),加法电路难度和成本已经很高了, 当时的条件下,再去设计一个减法电路,费力又费钱,前辈们想用加法电路来 ...

  8. 浅析为什么char类型的范围是 —128~+127

    在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用 ...

  9. 【秒懂】byte的取值范围为什么是-128~127?

    直接给总结:计算机规定了0000 0000 代表0,1000 0000代表的-0没有意义,必须找个~127~127之外的数和它对应,「人为规定-0就是-128」,而且这么做完美适合计算机做减法运算. ...

最新文章

  1. 独家 | 使用深度神经网络在Oculus Quest上进行准确的手部追踪
  2. Springboot+Docker+RabbitMQ教程来了。
  3. opencv8-图像模糊
  4. PHP二开 三语言( 中文、英语、马来语) 自动抢单系统源码
  5. 51单片机冒泡排序_51单片机片外冒泡排序
  6. css列名不动_利用js+css+html实现固定table的列头不动
  7. 常见的资源记录类型及应用示例
  8. Windows各个系统勒索补丁下载地址
  9. 服务器如何安装虚拟声卡,虚拟声卡驱动VirtualAudioCable安装使用设置教程
  10. (转载+原创)jQuery实现的全选、全不选、反选和半选功能
  11. 概率论基础-泊松分布计算近似概率
  12. 音视频开发成长之路与音视频知识总结
  13. 献结程序员的一个故事——管道的故事
  14. 水印,数字水印,频域水印(隐形水印)很麻烦!用这个分分钟搞定!
  15. 伺服速度控制模式接线图_电动缸的三种控制方式简介及控制接线图
  16. Kubeadm-K8s1.20-高可用部署-详细-生产环境(四)
  17. dell服务器增加磁盘阵列,Dell PowerEdge服务器如何通过联机容量扩充的方式实现磁盘阵列扩容?...
  18. 空间中的语义直线检测_直线检测
  19. 026 [转载]冰血大哥的一篇学习计划
  20. SAM和BAM文件格式详解

热门文章

  1. 软件工程174翟露露
  2. LVGL---使用物理按键代替触摸(groups)
  3. 看不见的二本学校学生
  4. 计算机科学速成课 Crash Course Computer Science 第三十集 万维网 The World Wide Web
  5. 2016计算机国二试题,全国计算机等级考试一级考试试题及答案(二)
  6. 计算机一级考试B十类理论题,计算机一级考试试题
  7. 蓝桥杯python组—— 猴子分香蕉
  8. mysql 创建外键约束
  9. 计算机文档xsl,XSL 文件扩展名: 它是什么以及如何打开它?
  10. 5.15 使用is语句检查实例的类型 [Swift原创教程]