范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

一篇文章精通计算机中的原码反码和补码

  大家好,我是贠学文,点击右上方"关注",每天为您分享java程序员需要掌握的知识点干货。
  凌晨四点的北京
  在学习java基础的时候,学到int类型的时候,我们都知道int类型是由32位二进制表示的,那么它的最小值,应该为-2^31-1,但是实际上,它的最小值却为-2^31,大家有没有想过,为什么会这样呢?这就与我们今天提到的计算机中二进制的原码、反码和补码有关。
  我们都知道,在计算机内部,一切的数据都是以二进制的形式来存储的,而我们在有关二进制的术语中,经常会提到原码、反码、补码这三个概念,那这三种编码分别指的是什么呢,它存在的意义又是什么呢,今天就来详细讲解一下。原码、反码、补码存在的意义
  原码:
  这个理解起来很简单,就是二进制最原始的编码,由0和1组成,最高位为符号位,其它位为数值位,其中符号位0代码正数,1代表负数,比如用一个4位的二进制码表示 6:0110,-2:1010
  补码:
  在二进制的运算中,计算加法是非常简单的,但是如果计算减法,计算机的硬件电路设计会非常复杂(至于为什么会复杂,这是硬件的东西,我们不考虑),所以我们就想,是否可以让加法来取代减法运算,从而简化计算机的硬件电路设计呢?
  我们都知道,在运算规则中,减去一个数,等于加上这个数的相反数,那么利用这个思路,我们就可以实现用加法来取代减法运算,从而简化计算机的硬件电路设计。但是在实际的操作过程中,发现用这种实现方式计算出来的结果是不正确的,至于为什么不正确,后面会说到。所以为了使结算结果正确,就为每一个二进制数,都设计出了对应的补码,然后在运算时和存储时,都是基于补码来运算和存储,这样计算出来的结果就是正确的。
  反码:
  在计算二进制原码对应的补码时,衍生出的一种处于中间状态的编码。它的存在,只是用来计算补码的。原码、反码、补码的计算规则
  对于正数来讲,反码和补码都等同于原码本身。
  对于负数来讲,
  反码:符号位不变,数值位的每一位做按位取反
  补码:对反码的值+1
  举例:
  一个4位的二进制数表示-6,那么它的原码:1110,反码:1001,补码:1010
  -1:原码:1001,反码:1110,补码:1111补码的计算规则的由来
  假如对于两个4位的二进制数,我们要计算5-2,那么我们可以转换为5+ (-2),那我们来计算一下他的结果
  0101
  1010
  --------   1111
  我们看到,计算出来的结果竟然是-7,这明显是错误的。至于为什么会出现这样的结果,原因也很简单,我们在把2的二进制转换为-2的二进制的时候,它的数值位没有变,只是把符号位由0变成了1,那我们在数值位做运算的时候,实际上就是做的5+2,然后符号位在做运算的时候,计算的结果负数,那么计算后的符号位与计算后的数值位结合起来,结果自然就是-7。这也就解答了前面说的为什么用加上一个数的相反数这种运算来取代减法时,计算结果是不正确的原因。   那么我们怎样才能计算出正确结果呢?   按照正常的情况下:A - B = C ,其中A和B均为正数且A>B,那么C一定是大于0并且小于A的。但是按照上面的原理来讲,A - B =A + (-B)= -(A + B),这样计算出来的结果,符号位一定是负数,并且数值位的结果一定大于A,这显示是不对的,我们预期的结果是,符号位为正数,并且数值位结果小于A,那怎样才能达到这个效果呢?这时我们就想到了补码的算法。   我们可以参考下时钟的原理,时钟最多只能表示12个数,所以时钟每次过12点以后,就相当于发生了溢出,溢出后,就会再次从1点开始计算。补码的原理:假如对于一个4位的二进制数来讲,它可以表示0到7这8个数,那我们把这8个数想象成一个时钟,我们做5-2,其实就相当于把时钟回拨了两个小时,但是我们如果不回拨两个小时,而是向后拨6个小时,可以达到同样的效果,只不过这时会发生溢出,溢出后,重新从0开始计算。所以这时6就相当于-2的补码。我们可以把5+(-2)转换为5+6.   但是同时我们也要考虑下正数的计算,因为正数的计算是不存在问题的,所以正数可以不用计算补码,直接做运算。我们也可以理解为正数的反码和补码都和原码保持一致。那么这个时候问题就来了,我们上面说了-2的补码为6,那么我们如果现在知道了一个数的补码为6,怎么知道它的原码是多少呢?它的原码有可能是-2,也有可能是6。这时候就造成了原码和补码不是一对一的对应关系,所以我们无法通过补码来计算原码。所以为了解决这个问题,规定负数的反码和补码,一定还是负数。即-2的补码为-6,这样就很完美的解决了这个问题。   那么我们再来算下5+(-6)的结果   0101
  1110
  --------   10011
  这时候我们发现发生了高位溢出,那我们再把最高位舍弃,即0011,结果为3,这时候的结果就是正确的了。   那么现在的问题来了,我们如何计算任意一个负数对于的补码呢?   根据我们上面说的,负数的反码和补码,一定还是负数,所以我们保持符号位不变,那么数值位部分的计算,我们还是参考时钟的原理,实际上就是往拨了一圈(一圈即二进制能表示的正数的个数),然后在减掉我们要计算的值(即原码的数值位),那么对于二进制来讲,就是用二进制能表示的正数的个数-原码的数值位。对于一个n为的二进制数,它的正数的取值范围为 0至2^(n-1)-1,所以它能表示的正数的个数为(2^(n-1)-1)+1个。   那么补码数值位=(2^(n-1)-1)+1 - 原码数值位 = (2^(n-1)-1) - 原码数值位 +1 = 原码数值位的反码 + 1   那上面的公式中,为什么(2^(n-1)-1) - 原码数值位 = 原码数值位的反码 呢?   因为2^(n-1)-1,是表示的二进制的最大值,即除符号位以外,数值位的所有位,都为1,所以2^(n-1)-1=2^0+2^1+2^2+......+2^n-2,那么(2^(n-1)-1) - 原码数值位=2^0+2^1+2^2+......+2^n-2 - 原码。那这个操作的最终结果,就相当去把原码的数值位按位取反了,即原码数值位的反码了。   那综合上面的结果,对于一个负数的补码的运算规则,就是保持符号位不变,数值位做按位取反,得到反码,然后反码的基础上在+1。补码还可以解决二进制中0的问题以及int类型为什么可以表示-2^31   我们还是拿一个4位的二进制来举例:4位二进制能表示的负数的范围为:1111至1000,即-7到-0,而位二进制能表示的负数的范围为:0000至0111,就0至7,这时我们发现,出现了两个0,一个是1000,一个是0000,这显然是不行的。   通过上面我们知道,负数的反码是数值位不变,然后数值位按位取反,那么负数的反码可以表示的范围也是1000至1111,而补码是在反码的基础上+1,所以补码可以表示的范围为:1001至1111+1,就-1到-8。所以,通过补码,就完美的解决了这个问题。而int类型为什么可以表示-2^31这个问题,也同时就解释清楚了。   往期精彩:   java中的enum第一期:enum存在的意义   java中的enum第二期:enum底层实现原理   String为什么不可变   工厂模式如何消除大量的if else 第一期   Elasticsearch的核心真的是倒排索引吗?   作者介绍:   贠学文,具有多有经验的java开发工程师,业余时间利用头条分享技术知识点与自己对技术的感悟,帮助对自己未来感到迷茫的程序员,在技术上得到提升。结识一些志同道合的朋友,相互促进,共同进步。

活力淄博英语风采大赛圆满收官中国山东网感知山东9月27日讯9月24日至25日,2022活力淄博英语风采大赛决赛顺利举行,标志着本次大赛圆满收官。本次大赛由市外办联合市委宣传部市关工委等8个部门共同主办,淄博市宣传临汾形象讲好临汾故事展示临汾风采喜迎二十大奋进新征程五进汾河景区系列文化活动启动山西法治报临汾讯9月28日上午,喜迎二十大奋进新征程五进汾河景区系列文化活动启动。临汾市委常委宣传部长闫建国,副市长王云出席启动仪式。举办五进汾河景区系列文化活动既是临汾市贯彻落实27岁华莎的T恤时尚,秀健康结实身材,古铜色肌肤,优越骨盆认证27岁韩国女星,女团Mamamoo华莎(安惠真),日常的T恤穿搭时尚,健康结实的身材,古铜色的肌肤和自信的气场,吸引了韩国网友们的关注。9月30日,有韩国媒体以标题华莎,令人眼花缭奋进新征程建功新时代非凡十年出彩中原厚重河南丨创意激发文化活力近日,三门峡白天鹅途居野奢露营基地在黄河岸边好阳河湿地公园开营,游客带着帐篷,开着房车,尽情享受休闲时光。杜杰摄游客在洛阳市龙门石窟景区参观游览。张怡熙摄第五届中原国际文化旅游产业小个子穿靴子,建议穿短不穿长,这样搭配显瘦显腿长头条创作挑战赛进入秋冬季后,很多女生都纷纷购入了不少新款衣服,却唯独不知道该买什么鞋子。要说在这个季节里,一双短靴绝对是必不可少的。尤其是对于小个子而言,短靴更是显高显瘦的神器,相佩戴不同档次的手表品牌,能够看出对方的经济实力?你以为的名牌手表,它们的时间并不会变多,但为什么那么多人依然喜欢呢?男人佩戴手表都比较追求品牌档次,主要是因为它能侧面反应出佩戴者的经济实力,彰显男士的身份地位。虽然手表都是用来看行走地理跟着台湾省学地理之布基纳法索布基纳法索的简介布基纳法索(TheBurkinaFaso),是位于非洲西部的内陆国,因在沃尔特河上游,故原名上沃尔特,今名意为正人君子之国(或译作尊严的国家)。该国东北与尼日尔为邻1949年开国大典,台湾当局欲派飞机搞轰炸,被我方人员机智化解天安门广场国庆升旗仪式今天,中华人民共和国,中央人民政府成立了。当毛主席用一口湖南话响亮地说出这段开国致辞的时候,天安门前30余万群众爆发出震耳欲聋的掌声和欢呼声。所有人都知道,一新疆王盛世才逃到台湾后因怕遭暗杀隐姓埋名,死时满脸惊恐1949年解放前夕,新疆王盛世才带着家眷随蒋介石逃到了台湾。以盛世才见风使舵的性子,国民政府倒台后,他理应留下倒向共产党。他为何没有?盛世才主要原因有二第一,他自知自己在新疆犯下了今晨,林志玲等一大批台湾巨星,不顾台独威胁,毅然庆祝中国国庆今天(10月1日)是中国国庆73岁华诞,今晨一大早,台湾女神林志玲杨丞琳欧阳娜娜等一大批港台巨星,不顾台独势力的威胁与恐吓,纷纷在社交媒体平台上发文,公开并热烈庆祝祖国生日!女神们2022国庆假期哪里玩?出行安全又美丽的14个省旅游目的地马上就国庆长假了!首先祝我们祖国富强昌盛。虽然近期全国新冠疫情以点状扩散,疫情依然严峻,但总体势头向好。除了中高风险地区,大部分地区持48小时候核酸绿码正常通行。下面给大家罗列一下
16年了桑巴军团出过一个合格射手吗?还有脸玩九锋轮换?五星巴西黯然出局,有人说天才内马尔流下的泪都是主帅蒂特脑子里挤出的水,不可否认蒂特这场比赛尤其是加时赛阶段的用人存在很大争议,可如果巴西但凡有个射术准点的射手,又何至于120分钟都31打爆张本美和!国乒18岁神童4天夺2冠,李隼退休前又获天才北京时间12月10日,乒乓球世青赛正如火如荼的进行中,在本届世青赛的比赛中,其实国乒的最主要对手就是来自于亚洲的日本队,近些年来,日本乒乓球的发展速度惊人,在世界大赛中很多年轻运动通过这次经历可以变得更强莫德里奇对满眼泪水的内马尔说据日本媒体SOCCERDIGESTWEB12月10日报道称莫德里奇安慰点球后的内马尔当地时间12月9日,在卡塔尔世界杯决赛四分之一决赛中,克罗地亚对阵了巴西。比赛后,莫德里奇温柔的比尔盖茨20岁千金胸衣外穿出席时装周,与黑人男友甜蜜热恋比尔盖茨20岁的小女儿菲比阿黛尔。盖茨,靠着高调宣布与黑人男友人脸的热恋和在巴黎时装周上大胆的胸衣外穿走红了网络。比尔盖茨20岁千金时装周胸衣外穿,身材火辣这位身价不菲的千金小姐,华为P60Pro完美逆袭,金字塔机身超视觉一体屏,库克压力很大华为作为国民品牌,想必大家都熟悉,旗下机型众多,在高端旗舰手机市场表现出众,可与三星苹果一较高下。自研麒麟处理器独一无二,性能和稳定性兼具,综合体验不输苹果A系列仿生芯片,就在华为想要肝脏好,这6个细节,要做好肝,是一个很神奇的器官,喝酒伤肝气的肝疼熬夜伤肝吃药伤肝脸色发黄肝火大好像人体所有的不适都与肝脏产生联系,所以一定要做好护肝养肝的工作,好让肝脏继续为人体服务,今天就来说一说,养肝长情帮扶初心不改西藏电信绘就乡村振兴新图景清晨,第一缕阳光洒向草原,勤劳的牧民已经开始一天的劳作。看似平常的时光,其实已经发生了巨大而深刻的变化。因为有了网络,电视和移动支付走进了农牧民群众家中孩子们坐在宽敞明亮的教室里,前所未见的细节!中国天眼立功了璀璨群星聚集夜空,形成了一条横亘苍穹的银河。作为人类在浩瀚宇宙中的家园,银河系的结构和组成依然有很多谜团。利用中国天眼(FAST),中科院国家天文台韩金林研究员领导的科研团队近日揭冬景(原创诗歌)来源头条免费图库我看见一株枯了叶的树落了满地树的枝头挺着小骨朵好像春天预绽未开的花苞这是春天攒着劲充满着希望我转着欣赏徒留了枝头的银杏果豆三两挂在树头久久回眸妈妈的眼睛那么迷恋那么天堂里微笑(一)我最喜欢的一首歌夜空忘了吧在想他又有什么用,还不是烦恼多一重,还不是有始无终,来匆匆没想到去也匆匆,昨夜梦却见你含情笑容。漫长夜空星月无踪,夜空之下只有我在回想着往事如云烟,忘了吧如果你是以下这几种人,那你很难赚到钱?1只盯着钱看的人,空想主义者这种人属于典型的思想上的巨人,行动上的侏儒,他们很想赚钱,每天晚上都会想着明天怎么赚钱,过上富人的生活,结果每天都只是想一想,从来没有付出行动。看到别人