补码10000000和原码10000000的比较讨论

您所在的位置:网站首页 11101000补码所表示的十进制 补码10000000和原码10000000的比较讨论

补码10000000和原码10000000的比较讨论

2024-01-15 19:53| 来源: 网络整理| 查看: 265

  二进制原码10000000,真值为-0,反码为11111111,补码为100000000,溢出1,舍去模之后为00000000。

  机器码10000000,作为原码时为-0,反码时为-127,补码时为-128

  规定[x]补=10000000时,x真值为-128,可以扩充范围,并无其他意义。此时的x在八位二进制下没有原码。

  放出一个表格,是机器码作为原码反码补码移码时,对应的x的数值,即真值

(图片来源于学校教学ppt和王道考研视频,侵权删)

  写本篇博客是因为期末复习看ppt误解了老师表格的意思,把机器码,作为原码反码补码时,对应的x的真值为多少,看成了机器码作为真值时,对应的原码反码补码表示的数值,产生了10000000的补码为-128的误会,实际上10000000,即-0的补码为00000000,作为补码时对应的真值为-128。

———————————————————————————————————————————

补充:

10000000作为补码时,真值规定为-128不是没有依据的,因为对于补码有一个特性,对于负数来说,将补码看成无符号数,用2^(n+1)减去这个无符号数,得到的数就是补码对应真值的绝对值的原码,也就是负数原码符号位取反,相当于钟表轮盘式的抽象概念,原码加补码正好为一圈,n位数的2^(n+1)。再看符号,符号位为1则为负数,0为正数。

所以,10000000作为无符号数为128,用256-128得到128,符号位为1,得到-128。

除此之外,为了使移码保持从小增大的特性,也需要如此规定。

在补码加减运算中,-64的补码11000000自身相加,得到10000000,就是-128的补码,没有发生溢出现象。

补充:

在求解补码时,若原码表示的数值为负数,那么可以通过一种简便方法进行计算:

将原码中从右往左数第一个“1”位和其右部分所有的数值保持不变,左侧除符号位全部取反,符号位保持不变,这样可以得到一个准确的补码数值。

但是此方法需要有几点注意事项,第一点,原码若为-0,即10000000,此方法不可使用,-0对应的补码只能是00000000,溢出的1舍去。

第二点,不论是此方法还是正常的补码求解方法,都不能得到补码10000000,此补码不在运算范围内,认为规定其为-128。

对于其余所有补码,均可成立。 

补充:

关于[-x]补和[x]补的运算:

可以采取,所有的位数全取反再加1的方法

但是同样地,有几点需要注意:

首先是-0和+0的补码,因为出现了进位舍去的原因,因此保持正确结果

即00000000不论表示-0还是+0,其补码都为其本身

对于其他所有正数来说,此规则成立,因为此方法相当于对其相反数(负数)先求补码,即先符号位取反,再求其补码,比如00000001,相当于对原码为10000001真值为-1的数求补码,得到11111111,即为-1的补码

对于除10000000外所有的负数,相当于先求其补码,再符号位取反,因为补码的补码为其原码,且除了10000000机器数外不存在进位,因此相当于对负数求出原码,再符号位取反得到其相反数(正数)的原码,其补码为其原码,因此也成立

但是对于10000000来说,此规则不可适用,最直观的一点就是,-128不能在8位二进制内求出其相反数的补码。用该规则求出补码后,依然得到10000000,为-128的补码,为其本身。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3