专栏首页烟草的香味补码到底是个什么东西

补码到底是个什么东西

概述

先引入一个前提,在计算机中数字是以二进制进行存储的,也就是我们看到的2,在计算机中存储的是10。我们进行的加法运算 2+1=3 在计算机中是这样的(这里先假设计算机存储的是4位二进制数字) 0010+0001=0011

很容易看的出来,4为二进制数能表示的最大数字是1111,就像两位十进制数表示的最大数字是99一样。那如果在进行加法运算时,结果超出存储的容量怎么办?比如:9+9=18 二进制表示为:1001+1001=10010,但是,因为只能存储4位数的原因,最高位丢了,结果变成了 0010,也就是2,这时是发生了溢出的。在做运算时要避免数值发生溢出(当然,现在计算机存储的数字为64位,日常使用完全不用担心)

运算不光有加法,还有减乘除。乘法就是多次加法,除法就是多次减法。那么减法如何实现呢?在刚开始的时候,计算机只能进行加法运算,这时一部分人想办法让其能够直接进行减法计算,而另一部分人想通过加法来实现减法,最终后者先给出了解决方案。(只是我臆想的情景)

通过加法来实现减法

还记得上面提到的,四位二进制数表示的最大数字为15,当发生溢出时:

16=>二进制:10000 => 0 17=>二进制:10001 => 1 显然,去掉最高位等于减去16

那么能不能利用加法溢出来实现减法呢?下面简单推倒一下:

9-2=7 若要实现 9+x=7 那么利用溢出的原理,就要实现 9+x=7+16=23 简单的解一下方程 x=23-9=14 , 很好,来验证一下:

9+14 的二进制表示为:1001+1110=10111 最高位溢出,结果为:0111 也就是7,完美。

下面问题来了:如何将上边的2转成14呢?也就是讲二进制的0010转成1110。他们有什么关系呢?

伟大的数学科学家前辈们总结出了规律。并发明了反码和补码的概念。补码就是上面转换后的14。

原码=>按位取反=>反码 反码=>加1=>补码

虽然不知道这个规律是如何找出来的,但经过无数次验证,确实是这样。

引入负数

当引入了负数的概念时,为了表示正负,规定第一位为符号位(0为正,1为负),因为引入符号位,原来的4位数,能表示的最大值也变成了0111

因为负数的引入,现在所有的减法都可以当做加法来实现了,9-2=9+(-2),或者说9+(-2)=9-2。计算仍然是通过补码来实现。

负数的补码为:符号位不变按位取反,再加1 正数的补码为:它本身

负数的补码很好理解,就是上面总结的规律,利用加法来实现减法。正数的补码为啥是它本身呢?你看刚才分析的减法,只有被减数进行了转换,减数没变吧。很好理解。其实也是为了可以统一进行处理,引入补码后,正负数可以使用一套加减法规则进行计算。

简单实验一下:

2+(-4)=-2 -4 => 二进制表示:1100 => 补码:1100 2 => 二进制表示:0010 => 补码:0010 1100+0010=1110(补码) 将计算结果再转成原码 1010,-2没毛病

然后,有一个尴尬的问题,正数的0为: 0000,负数的0为:1000,同一个数字,但是换成补码后,你会发现是同一个数字: 0000

总结一下:利用补码计算,就是通过加法来实现减法运算,是利用了计算机存储位数有限,超出发生溢出并丢失最高位的特性。

不知道补码是哪位伟大的科学家发明的,前人栽树后人乘凉,膜拜。

本文分享自微信公众号 - 烟草的香味(hujing-bc),作者:胡靖哥哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java并发性和多线程

    例如一个应用程序需要从本地文件系统中读取和处理文件的情景. 比方说, 从磁盘读取一个文件需要5s, 处理一个文件需要2s. 那么处理两个文件就需要:

    烟草的香味
  • 揭开HTTPS的神秘面纱

    在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了,大家每天都在用,每一次HTTP请求,都是一次TCP连接。遗憾的是,请求的内容在TCP报文中是...

    烟草的香味
  • 设计模式之黑板模式

    黑板模式是观察者模式的一个扩展,知名度并不高,但使用的范围却非常广. 其意图为: 允许消息的读写同时进行, 广泛的交互消息.

    烟草的香味
  • ofo 再融4.5亿美元,单车大战胜负手已现?

    投资方正在为街头上的自行车大战源源不断地补充弹药。 今天ofo宣布完成D轮融资,金额达到4.5亿美元,DST领投,滴滴、中信产业基金、经纬中国、Coatue、A...

    罗超频道
  • springcloud feign集成hystrix

    这里如果需要查看hystrix监控,可以集成Hystrix Dashboard,详情参考 https://blog.csdn.net/u013408188/ar...

    一笠风雨任生平
  • 西湖论剑回顾 | 网络安全创新成果分享之政务云安全服务创新

    2018年4月27日,“西湖论剑·网络安全大会”在杭州国际博览中心隆重举办。大会积极响应习近平总书记在全国网络安全和信息化工作会议上“敏锐抓住信息化发展历史机遇...

    安恒信息
  • 简化markdown写作中的贴图流程

    这么复杂的流程,让人简直没有了插入图片的欲望;但是大量的文字没有图片,必然让人疲惫;

    weishu
  • Fortinet简单介绍

    以前对飞塔的防火墙也有一些了解,但是那时候并没有现在的地位和技术优势。现在的Fortinet在Gartner魔力象限中已在leader中了。

    刘銮奕
  • Google - AMP框架分析及外贸站接入解决方案!

    AMP(Accelerated Mobile Pages – 加速移动页面)是 Google 推出的一种为静态内容构建 Web 页面,提供可靠和快速的渲染,加快...

    Levi.Ackermann
  • spring mvc controller间跳转 重定向(forward) 传参 几种形式

        需求:spring MVC框架controller间跳转,需重定向。有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显...

    凯哥Java

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动