为什么需要补码
在真实世界里,常常需要负数。如果存储在存储设备中的最小值为0,那么计算机如何存储负数呢?这个问题不是存储问题,而是程序设计人员的解释问题,类似这样的问题在后边的存储设备中也存在( 关注下一篇)
百科概念
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
从百科解释来看是为了减少硬件电路设计,这是最终目的。从设计目的来看实在感慨设计师的巧妙。
下面我们分析一下,为什么原码取反加一就能够减少硬件电路,换句话说,为什么取反加一就可以将减法转化为加法?
定义和原理
从百科来看,给补码下个定义比较困难,就好比解释什么是筷子一样。我们可以抛开计算机,从人类社会数学的概念出发,给补码定义如下:
所谓补码就是某个数n,这个数加上-n=0。这也是补码的基本原理。
我们将二进制的首位为0解释为正数,1解释为负数

补码.jpg

13 00001101
-13 11110011(补码)

1 00000000

直接从以上等式来看,13和-13之间除了符号位不一样,其实位之间并无关系。而实际上他们之间的关系十分微妙。
这里可能有人会想,为什么不直接将符号位取反即表示负数?比如+13(+一般省略)和-13在十进制中就是符号不一样。
理论上单纯从解释的角度出发没有问题
00001101 (+13)
10001101 (-13)

但无法将该种解释通过加法来实现减法.(因为二进制相加之后不为0)
那么这种微妙的关系是什么呢?
通过补码的定义
n+(-n)=0
这里的(-n)即为补码.我们反推过来,这里n已知,0已知(00000000).
如何求-n?
我们知道给定一个数n,让这个数变为0有两种办法

做减法,将这个数的每一位减1,这个办法在百科的概念中可以被否决,因为要增加硬件成本.
做加法,让结果溢出后即为0

根据第二种办法我们得出
最大的数+1即可溢出为0
那么n+(-n)=0 成立,-n推导如下
已知
0=(11111111+1)

11111111
1

1 00000000
=>

n+(-n)=(11111111+1)
已知
n|~n=11111111
n+(-n)=(n|~n)+1
n+(-n)=(n+~n)+1(二进制按位或即按位相加)
=>
(-n)=~n+1 (等号两个n抵消)

总结
通过以上分析,真的感慨计算机大师的微妙设计。
通过数学的巧妙设计使cpu中不需要减法器电路以减少设计成本。

作者:zh_harry
链接:https://www.jianshu.com/p/f774a73a06ad
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

计算机二进制补码为什么是原码取反加一相关推荐

  1. 二进制补码为什么是原码取反加一

    二进制补码为什么是原码取反加一 一.二进制和原码的定义 二进制 原码 二.反码和补码的形式 反码 补码 三.补码为什么是原码取反加一 补码的出现 补码的原理 反码的确定 四.总结 强调: 一.二进制和 ...

  2. 二进制取反加一怎么算_二进制负数为什么是正数的取反加1?

    展开全部 可以使符号位能与有效值部分一起参加运算32313133353236313431303231363533e58685e5aeb931333431373934,从而简化运算规则. 为了使减法运算 ...

  3. 正负数在计算机中的表示(原码反码补码)及位运算

    负数在现代计算机里一般用补码表示(正数也是) 正数补码就是它的原码 负数补码: 最高位是符号位,其余位为对应整数的原码取反再+1 如:1000 0000还原为原码:最高位是1,表示负数,剩余的各位取反 ...

  4. 计算机原码补码和反码的计算方法,一个数的原码,反码,补码怎么算,原码 反码 补码...

    数在计算机中是以二进制形式表示的. 数分为有符号数和无符号数. 原码.反码.补码都是有符号定点数的表示方法. 一个有符号定点数的最高位为符号位,0是正,1是副. 以下都以8位整数为例, 原码就是这个数 ...

  5. 计算机组成原理整数乘法,计算机组成原理 - 定点整数的原码补码运算(待验证)...

    计算机组成原理 - 定点整数的原码补码运算(待验证) 目录 〇.环境 对象 运算 定点整数原码.定点整数补码 移位.加.减.乘.除 原码定义: \(x=\begin{cases} x &0\l ...

  6. 一篇文章学会二进制的运算以及原码、反码、补码

    这是我的课程中的课件,课程链接:我自己录的配套课程链接,点击前往 一.存储单位 1bit 一位 1Byte = 8bit 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1 ...

  7. 计算机组成原理:真值,原码,补码,反码,移码

    (1)如果真值大于0,其原码,补码,反码都一样. (2)本人所写为本人认为最简求法,省略了大部分原理,详细请参考计算机组成原理. 1,真值 就是现实中的数字(二进制)必须有+/-,实际中整数舍弃了+. ...

  8. 计算机组成原理真值的补码,计算机组成原理:真值,原码,补码,反码,移码...

    一,真值 就是现实中的数字(二进制)必须有+/-,实际中整数舍弃了+. eg:+1101010001 -1010001111 二,原码 计算机中唯一标识一个真值,但是不能用于计算以及无法实现减法,会产 ...

  9. 二进制的编码(原码、反码、补码)

    二进制的编码(原码.反码.补码) 1.二进制怎么编码? 1字节 = 8位,所以它能表示的最大数当然是8位都是1(既然2进制的数只能是0或1,如果是我们常见的10进制,那就8位都为9)1字节的二进制数中 ...

最新文章

  1. Oracle 赋权和回收权限的生效时间
  2. Beaglebone Black开发板安装驱动
  3. MacBook Air m1的内存
  4. 闪屏,default
  5. pandas:apply(),applymap(),map()
  6. Keras-保存和恢复模型
  7. 使用python标准库urllib2访问网页
  8. RestTemplate的异常 Not enough variables available to expand
  9. centos 安装 时间校准与定时同步
  10. matlab-基础 plot linewidth 设置图像的线粗细
  11. Don’t Just Assume; Look and Answer: Overcoming Priors for Visual Question Answering——论文阅读笔记
  12. 电脑版微信多开,只需要三步
  13. 基于爬虫毕业设计题目
  14. 5800p计算机公式,卡西欧fx-5800p计算器内置公式及公式自定义在隧道测量中的应用...
  15. 5G基础及计算机网络参考模型
  16. 结婚戒指为什么要带在无名指上
  17. 花生采摘(peanuts)
  18. PHP版本美团闪购开放平台sdk
  19. C语言如何产生一个随机数,rand函数的使用
  20. aws php 上传文件 限制大小_php如何实现文件上传下载-PHP问题

热门文章

  1. 汽车企业能源管理工具_汽车生产能源管理系统_综合能源管控系统
  2. 软考信息安全工程师专业英语题
  3. Unity Timeline从入门到精通(三):轨道详述
  4. day16力扣383赎金信
  5. 谈思生物公益直播-吉美瑞生CEO《后新冠时代肺前体细胞新药研发》
  6. 教你怎么用电脑录制麦克风里面的声音
  7. 设置应用图标提醒数字(右上角)
  8. 实战精通OpenCV第一章--基于Android的图片卡通化及肤色改变(一)
  9. Java——Web后端学习路线
  10. linux 部署java的胡那就,心得之:linux下安装jdk tomcat oracle10g