专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

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

兄弟们,我问一下,大便分叉是怎么回事?神评,神回复!1兄弟们,我问一下,大便分叉是怎么回事?神评论2兄弟们,千万别碰烟,我染上烟瘾了,一天两根烟,好可怕啊!神评论3谁给我介绍个对象?给我介绍个对象,我就把我闺蜜介绍给你鬼灭之刃锻刀村篇动画即将上映,恋柱温泉泡澡名场面值得期待鬼灭之刃无限列车篇的动画作品已经完结有一段时间了,很多粉丝都在期待下一部锻刀村篇的上映,而就在最近,官方公布了锻刀村篇的第二个动画PV,这也意味着锻刀村篇的上映已经提上了日程!其实LPL17支战队夏季赛大名单汇总iGLNG无变化大家好,这里是锦城,给大家带来英雄联盟电竞圈的最新资讯。随着憋气大赛冠军FPX官宣了夏季赛的大名单,LPL十七支战队的大名单都正式出炉,让我们来看看大名单都有哪些变化吧!BLGBL深圳50辆宾利事件似乎钱越多,越没有底线官方通报国企书记事件调查进展女子开50辆宾利堵被占车位?官方回应官方通报国企书记事件调查进展深圳这两天,深圳50辆宾利女大战劳斯莱斯车主闹得人尽皆知,很快就在网上疯传,上了热搜,各从石崇王恺斗富到深圳宾利风波,腐朽的富人思维仍在传承文吴军捷工作室孙玉良50辆宾利堵劳斯莱斯风波,指的是6月4日发生在深圳的一场宾利女与路虎男争夺车位事件。后经调查核实,网传的劳斯莱斯品牌汽车并非当事车辆,真正的当事车辆是一辆路虎,俄乌战争,最新重大突发事件大家好,本期我们来重点关注,俄乌战争,最新热点消息!英国首相约翰逊又在怂恿乌克兰总统泽连斯基,对俄罗斯进一步挑衅。无知的约翰逊大言不惭地表示,英国将继续与乌克兰并肩作战,他说出的话京圈沪圈西北圈东北圈港圈,在影视界都是何种地位?文六爷编辑七街酒舍内娱的影视圈一直以来便是壁垒分明,各自为政。简单来说,就是大家各有各的圈子。虽然圈这个字看起来多多少少有点地图炮的意思,但谁让内娱的老乡们就喜欢以出处来分帮分派呢李勒优参加高考,崔晋穿粉色旗袍打气,背后纹身被嘲像虾线引子李勒优是变形记中的农村主人公,父亲吃过花生米,母亲走了,爷爷奶奶出去打工了。家里只剩下她一人,睡觉要用绳子拴着自己的手和门,冬天还穿着凉鞋。可以说所有的心酸和苦楚,都发生在了李不吹不黑,两年前的华为Mate40Pro,相当于现在什么档次的手机?这几年安卓旗舰机集体开倒车,体验一年不如一年,导致很多消费者已经失去了换机的欲望。甚至还要一些消费者,等不到华为Mate50系列,依然想要入手华为Mate40Pro,这就导致Mat超模瘦得太吓人了,何穗野外大片肋骨突出,露背看着像排骨近日,何穗一组嘉人杂志封面大片释出,各种奇怪的拍摄角度,引发了网友的热议。照片中何穗仰躺在石块上,上衣包裹胸以上部位,露出明显凸出的肋骨,而无赘肉凹下的腹部更显得两旁的肋骨异常明显21年福建七旬老人临终前,爆出百万天价保险需连缴20年,引家属怀疑在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持!前言保险,本是现代社会的一种风险保障机制。可在部分无良公司的运作下,保险几乎成为
天津想买套二手房交易流程是什么?有什么具体注意事项?首先去房管局给房子查档,确保无问题,签订三方合同。办理网签,去银行存首付,面签。等银行贷款批下来,去房管局办理过户手续,缴税,等房本。房本一下来,银行会自动把钱转给卖方。交易流程,在山东,高考分数低于650能不能走出山东?如果你想走出山东,哪怕你是专科的分数也是可以的,甚至600分以上的我都是比较建议走出去的,没必要非得在山东大混战。举个去年真实的例子比如去年我们接的一个学生,男孩考了598分,这个哈工大威海和四川大学怎么选,大家认为哪家学校的认可度高?优先选好专业,如果都能去好专业的话果断哈威,哈威的毕业证和本部是没区别的,川大的毕业证估计也就在西南比较好使一点,出了西南的话要被哈工碾压的,除非你学医,否则是没道理去川大的两所大大专医学生,毕业后都去哪了?很多人都说医学大专生,中专生找不到工作,但我却不这么认为。我身边很多卫生院的医生和院长都说招人难,根本没人愿意来,本科的不用说,专科的和中专的都没人报名。就拿我自己说吧,想找个徒弟我想问问大家,供暖不热,找供暖公司不管用,怎么办啊?供暖真不应该私企承包,供暖也是民生的一部分,以人民为中心,老百姓交钱了,就应该享受温暖的温度。供暖不热找不到解决的地方,找到了也是互相扯皮推托,但是热费不按时交纳那可就惨了,那就是工资太低,看不到出路,人活一生到底是为了什么?能提出这个问题,说明人还活着,这就是问题的答案为了什么?为了活着。活着有两种活法一是生存,二是生活。等于有一种活着只是存在,即,生存。还有一种活着,是在不断的拼命努力,让自己成为一大学毕业后进了村两委,工资很低,你是否还会选择继续留在村里?谢谢邀请!现在每年大学毕业生人数不断增加,又没有那么多专业对口的合适岗位,我认为如找不到合适的专业对口岗位,去农村或社区二委工作也是一个好办法,过去有句话叫做社会是个大学校,而且社年轻时不孝父母不管妻儿,到老晚景凄惨,你怎么看?感谢邀答!上初中的时候,我们班经常会有一个老人来捡垃圾,也就是我们平时丢的废弃纸张。他看起来大约七十岁,特别瘦小,穿的也是破破烂烂的。尤其是冬天,他穿的很少,鞋子看起来就是秋天穿的为什么外卖小哥从来不吃外卖?昨天我点了一份炸鸡外卖,外卖小哥送来的时候,犹豫了一下说以后别再点这家的炸鸡了。看着小哥离去的背影,我整个人都凌乱了,吃也不是,不吃也不是,最终还是选择了不吃,把炸鸡丢进了垃圾桶,你身边有没有一些早年顺风顺水,老来却突然变得落魄不堪的人呢?刘华姐年轻时除了自己和她老公,便对谁都会低看几分,原因那时她身边的人谁也没有比她活得风光滋润的然而55岁一过,她老公就突然离世,儿女们因为分家产的事闹得分东离西的,她的状况就一落千安徽彩民又中年末双色球亿元大奖,机选倍投25倍,你怎么看?沾沾喜气好运,我守号十多年的大乐透和双色球2022开年大吉喜中一等奖祈祷祈祷祈祷甭说中亿的,就是中百万,千万有几个露脸的?从前我信,现在也信,信可以中二等三等奖,因为,体验过。加奖
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网