学过计算机组成原理的小伙伴们都知道,在计算机中,负数的二进制是用2的补码表示负数的。

那么,为什么要用这种方式表示负数?有什么好处?

我们一起来看下吧。

为什么用这种方式表示负数

计算机的内存通常都是由8位的字节构成的,所以一个二进制数要存储在很多个的8位的内存中,而通常都是最左边的位为符号位,0表示正,1表示负数。所以不管数字是8位,16位,还是32位,通常都会认为最左边的比特为符号位。

如下图表示:

这种方法看起来是解决了问题,在某些计算机上也确实解决了问题。每个数字由符号位的数据位组成,符号位为0表示正数,而1表示负数。数据位只是表示该数据的绝对值。
其实,这种方法只能用于无符号数值的加法运算,即正数加正数,能正确表示出来,要是要执行减法运算,就会出现问题。不信的话,看下面的例子吧。

现在假设用-8去加12,在计算机中,我们用理项状态下的简单的加法电路的方法去加,会发生什么?

以二进制表示+12为00001100;
以二进制表示 -8(假设情况下) 为10001000;

相加结果如下:


所以结果是-20,是不是很出乎意料?

或许有小伙伴看出问题了,上述中把符号位一起进行相加处理了。那么我们反过来想一下。或许就有答案了。

我们用+4去减掉+12,看一下-8在计算机中是怎么表示的。

以二进制表示+4是00000100;
以二进制表示+12是00001100;

那么,相减的结果是什么呢?


`看起来好像不像对不对,但是它就是-8.


`这里的-8的二进制序列,就是2的补码形式。它表示二进制负数。

那么,补码表示法是怎么计算出来的?

从+9的二进制入手:

00001001

现在对每个二进制取反,将变成,变成0:

11110110

这就叫做1的二进制的补码形式,给这个数加上1,就能得到2的二进制补码形式

11110111

那么,回到原题,我们用-8加到+12上的普通运算:

以二进制表示+12是00001100;
以二进制表示-8是11111000;

加到一起,就是


化为10进制,就是+4.

所以,这种方法是有效的。进位会传递到最左边的所有1上,把他们同时设置为0,所以正确的表示了这种计算方式。

这种方式有什么好处

对于计算机来说,最简便的方法就是最好的办法。使用2进制补码是最高效的办法,使用它的原因是,所有的加法计算都可以用同一种电路完成。上面的例子中,用理想状态下的方法去计算,会得到-20,这并不是正确的结果。所以,这说明了正常的加法运算并不适合正数与负数的加法运算,所以,就需要确定两套规则了,正数加正数,正数加负数,那么,就有两种电路了。

而使用2进制的补码形式,可以用正常的方法去运算,只需要将式子改写成12+(-8)= ? ,这样一来,一套电路就可以实现全部整数的加法了。只需要再开发个补码电路,就可以用一套加法电路实现所有加法运算。

如果觉得我写的不错的话,帮个忙呗

1.关注我的知乎账号小丛,上面有我的文章同步,同时需要询问学习计算机经验的话,也欢迎私聊。
2.点赞,关注我,这是对我最大的鼓励了,有了你们的鼓励,我会写出更多的优质文章。

还搞不懂负数怎么用二进制表示?看完这一篇就懂了相关推荐

  1. 我就不信看完这篇你还搞不懂信息熵

    我就不信看完这篇你还搞不懂信息熵 https://mp.weixin.qq.com/s/7NrB0UtmELXD3UNO3C6jGA 让我们说人话!好的数学概念都应该是通俗易懂的. 信息熵,信息熵,怎 ...

  2. 面试还搞不懂Redis,快看看这40道面试题!| 博文精选

    作者| 程序员追风 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 近年来,微服务变得越来越热门,越来越多的应用部署在分布式环境中.常用的分布式实现方式之一就有 Redis ...

  3. 运维学python用不上_作为运维你还在想要不要学Python,看完这篇文章再说!

    原标题:作为运维你还在想要不要学Python,看完这篇文章再说! 本文由马哥教育Python自动化实战班5期学员推荐,转载自简书,作者为Li.Yingjie,内容略经小编改编和加工,观点跟作者无关,最 ...

  4. 计算机考试大题电脑阅卷吗,看完电脑阅卷的“内幕”,你还会让这样答卷吗?认真看完最少多考20分!...

    原标题:看完电脑阅卷的"内幕",你还会让这样答卷吗?认真看完最少多考20分! 在小编的印象中,每年高考成绩出来那天,总有人觉得委屈,感觉实际分数不如自己考完对答案得出的分数高. 那 ...

  5. 计算机更新失败变的很卡,难怪电脑升级后还这么卡,罪魁祸首找到了,看完你还敢这么用吗?...

    原标题:难怪电脑升级后还这么卡,罪魁祸首找到了,看完你还敢这么用吗? 电脑卡顿是一种很常见的故障现象,它表现为电脑打开某一程序页面静止或者是鼠标转圈,卡顿与电脑的硬件有直接关系,一般来说配置高的电脑是 ...

  6. 听说你还搞不懂Golang的Slice?看这一篇就够了!

    在前面的文章中,我和大家一起学习了一下关于 Go 语言中数组的知识,当时有提到过一个知识点:在函数中传递数组是非常耗资源的一件事,所以更推荐大家使用切片(slice)来这么做. 那么切片又是一个怎样的 ...

  7. 还纠结选机器学习还是深度学习?看完你就有数了

    导语:「机器学习」还是「深度学习」,哪个更适合我呢? 大哥你好,我是来学「人工智能」的.但是,啥是「深度学习」?啥是「机器学习」?「深度学习」和「机器学习」有啥关系?我究竟该学「深度学习」还是「机器学 ...

  8. 车载导航 android,手机都能当导航,为什么还有人痴迷车载安卓大屏?看完这些你就懂了...

    随着手机导航APP的日渐风靡,更新不便.定位不准的原车导航逐渐被人们遗弃.就连很多原本没有自带中控屏的车型,也在使用了手机导航以后,有了鸟枪换炮之感.但是既然手机导航如此好用,为什么还有那么多人痴迷车 ...

  9. 看完这一篇你还不会JavaWeb吗

    JavaWeb 引言 相信小伙伴们大学实训的时候,会有过javaweb实训吧,反正我们那是,在没学习各大框架之前,我们都是学习javaweb的原生操作,相信原生基础好了,后面框架无非是提供便利,所以这 ...

最新文章

  1. VS2017 cout 不明确
  2. dp背包九讲(待补充,暂时前两讲)
  3. java实现排程算法_康托展开算法和逆康托展开算法[Java实现]
  4. JAVA中关于并发的一些理解
  5. dw上按钮事件 pb_「React TS3 专题」使用 TS 的方式在类组件里定义事件
  6. python 各层级目录下的import方法
  7. BZOJ4520:[CQOI2016]K远点对(K-D Tree)
  8. 【youcans 的 OpenCV 例程 200 篇】107. 退化图像的维纳滤波
  9. 这6大核心技能,程序员升职加薪的利器
  10. c++ 字典_再来瞄一眼字典与集合?
  11. 11 月全球 Web 服务器调查报告:nginx 表现最佳
  12. 多台电脑集群运算_答疑 | 三维建模的【电脑】配置问题
  13. redis的运行机制
  14. Java面向对象的继承
  15. Java中的for循环和JavaScript中的for循环差别初探(02)
  16. Ransac算法--直线拟合
  17. Jquery 数组操作(转)
  18. 第22节 软件工程知识
  19. 优秀软件测试工程师必读书籍推荐
  20. Linux查看硬盘型号

热门文章

  1. C#中使用Invalidate()与MouseMove方法刷新控件时,控件闪烁问题解决方法
  2. 一个ONLYOFFICE编辑器的在线演示地址
  3. 全球与中国智能监控摄像头市场现状及未来发展趋势
  4. Unity和Autodesk:通过更高效的工作流程提供沉浸式体验
  5. 35岁程序员被公司辞退,生活压力太大痛哭,中年危机如何自救?
  6. 18天掌握Java SE jvav梳理总结 从jvav到架构师
  7. 如何帮助传统批发零售业转型线上发展
  8. 【特征工程】特征工程技术与方法
  9. 如何设置VSCode删除整行快捷键?
  10. 区块链系统:点对点交易原理