关于计算机中使用补码运算

技术关于计算机中使用补码运算 关于计算机中使用补码运算1. 原码、反码、补码简单介绍原码、反码、补码都是含有一个符号位的、对带符号数的二进制表示,对应于同一个真值。
原码带符号位直接读出来就是真值。

浅谈补码运算在计算机中的应用

1. 原码、反码、补码简单介绍

原始代码、补码和补码是带有一个符号位的有符号数的二进制表示,对应于相同的真值。

原始代码的带符号位被直接读取为真值。

三个正数合二为一。

负数的补码是符号位不变(即保持为1),其余位反相(可以用同样的方法做相反的转换);

负数的补码是符号位保持不变(即保持为1),其余位反相后,最后一位加1(反向转换也可以用同样的方法)。

进一步理解:

原始代码:符号-幅度。以一个典型的8位二进制为例(如不说明,下同),8位可以分为符号位和幅度区,幅度区是最后7位。

反码:一的补码。人们常说,通过否定运算得到反码的方法,本质上是从1的补码推导出来的。-X的补码(X为正整数)等于1111 1111减去X的8位二进制原码表示(注意前1为符号位,可以参与这里的减法运算。因为被减数是正整数的原始代码,所以符号位是0。用1减去这个0,结果是1。因此,不需要从1的最后7位减去X的原始码的最后7位,然后保持第一位为1,但所有8位都可以直接参与减法)。例如-3的补码可以得到如下:1111 1111-0000 0011=1111 1100,与反相运算得到的结果一致(在反相运算的情况下,原码1000 0011符号位保持不变,其余位反相1111 1100)。

补语:二的补语。这里的二是指2 ^ 8的原码,-X (X为正整数),等于2 ^ 8减去X的8位二进制原码表示,即1 ^ 0000 ^ 000减去X的8位二进制原码表示(注意2 ^ 8需要用9位表示,前1参与减法)。很明显,2 ^ 8比1111 ^ 1111大1,和平时取逆加1正好一样(取逆加1可以帮助快速计算;2 8-x有助于理解补码运算是如何工作的)。

2.补码运算是如何生效的

首先有三种操作:正数加正数;加一个正数和一个负数;负数加负数(计算机只做加法,因为如果做减法,电子元器件需要增加成本才能完成相应的物理实现)。只讨论加数、加数、减数和子树的绝对值小于或等于幅度区域最大值的情况,如8位二进制表示中的127。

1.正加相对简单,省略。

2.为了方便,正加负:把上面提到的8位二进制改成了4位二进制(包括第一个符号位),0111=7是可以表示的最大正数。

结果为正的情况:5-3为例。-3的补码是1 0000-0011=1101。上述操作表明,在1101的基础上加3(即0011),即2 4=16=1 0000,可以完全实现该模块,使最后4位清零。5-3相当于(-3) 5。在加5的过程中,满模块被3清零。为了完成添加5的操作,需要继续添加2。添加2的操作完成后,添加操作完成。只需得到010,即2的补码,5-3=2的运算就在计算机中完成了。

结果为负的情况:的3-5为例。首先详细描述一下运算过程:5的补码为1 0000-0101=1011,(-5) 3: 1011 0011=1110,1110的第一位数字为1,为负数,其绝对值对应的原码为1 0000-1110=0010,即绝对值为2则为1110。首先获得结果的补码1110。在获取原码对应补码的过程中,使用“1 0000-1110=0010”,对应真值到补码的逆运算。真值的绝对值通过这个表达式得到,真值-2通过将0010的第一个0改为1得到。事实上,如果采用逆加一的方法,可以更快地完成原码和补码的相互转换:所有符号位不变(即保持为1),其余位反相后,最后一位加1,t

“结果为正的情况”与“结果为负的情况”如何统一理解:-A运算,一般来说,相当于用A在模块中挖洞(2 ^ 8=256为8位二进制),然后用B来填充。具体来说,首先取模-A,得到-A的补码,其符号位为1。然后开始添加B(1)如果B小于A,则模块无法填充。-A的补码与B相加后,相加结果小于1 0000,即小于等于1111,符号位保持1,仍为负。但加法运算使模数更接近填充,运算结果对应的真值绝对值更接近0,负数更少为负数。而b越大,结果越不负,因为1 0000-(-A的补码加b)对应的是结果绝对值的真值,b越大,结果真值的绝对值越小。考虑到结果是负面的,就没那么负面了。(2)如果

B大于A,那么模将填满,-A的补码加上B后,相加结果大于1 0000,即大于1111,满模溢出,使得符号位由1变为0,从而使运算结果变为正数,此时B越大,运算结果所对应的真值作为一个正数其绝对值越大;(3)可以看到,利用补码进行运算,并令符号位参与运算,能够:满模溢出时符号位变号,使得结果从负变为正;随B的增大,运算结果的绝对值先减小再增大;这符合数学认知。

  3.负加负:1xxx + 1xxx的结果必然溢出,且结果是1 0xxx还是1 1xxx中的一种,前者表示无溢出,后者表示有溢出。至于计算机识别、处理溢出的细节和负加负运算的细节,没弄明白,故不讨论

3.利用原码、反码进行运算的劣势

(此处图片,截取于参考资料1)

参考资料:

1. 为什么计算机采用补码而不是原码或反码 – 醉卧沙场的回答 – 知乎 https://www.zhihu.com/question/352057791/answer/876413629

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/135153.html

(0)

相关推荐

  • 西湖景点介绍,杭州西湖最值得玩的是什么

    技术西湖景点介绍,杭州西湖最值得玩的是什么西湖美景,是每一个去旅游的人都能够感受到的,不管是古代文人,还是现代的文人,都会有无数美好的词语来描绘西湖西湖景点介绍。来到了西湖,才真真切切地感受到了西湖的美。西湖,是一首诗,

    生活 2021年10月22日
  • jQuery如何改变input的属性

    技术jQuery如何改变input的属性本篇内容介绍了“jQuery如何改变input的属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年11月16日
  • C#操作MongoDb插入更新和删除的方法是什么

    技术C#操作MongoDb插入更新和删除的方法是什么C#操作MongoDb插入更新和删除的方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所

    攻略 2021年11月3日
  • 如何联系微信客服,微信理财通怎么联系客服

    技术如何联系微信客服,微信理财通怎么联系客服步骤如下:打开微信应用程序,然后使用手机号、QQ号或者邮箱登录自己的微信帐号,如图所示如何联系微信客服。登录成功后,点击界面顶部右上角的三点图标按钮。在出现的菜单列表中选择界面

    生活 2021年10月23日
  • Android消息机制Handler用法有哪些

    技术Android消息机制Handler用法有哪些这篇文章主要讲解了“Android消息机制Handler用法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Andr

    攻略 2021年11月30日
  • 过去的日子如什么仿写,匆匆第4段的仿写急!在线等

    技术过去的日子如什么仿写,匆匆第4段的仿写急!在线等1过去的日子如什么仿写、过去的日子如一块巧克力,不久就在嘴里化了;如一滴水,在阳光的照耀下蒸发了;
    如一个细胞,很快就死去了;如一片雪花,被阳光照化了。
    2、在这烟花缤

    生活 2021年10月25日