补码10000000和原码10000000的比较讨论 |
您所在的位置:网站首页 › 11101000补码所表示的十进制 › 补码10000000和原码10000000的比较讨论 |
二进制原码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 |