负数的原码反码和补码

          As we all know,正数的三码都一样,注意一下最高位为符号位即可;

         负数的原码最高位为1,与真值之间换算方便,但对于做减法的操作却很无力,于是引进了反码和补码;负数的反码为它的正数按位取反,也就是说把符号位和数值位都取反,比如4的反码为00000100B,则-4的反码为11111011B,可以看出,8位的二进制数可以表示的反码范围为-127~+127,即10000000B~01111111B;

         补码一直都是这一块的难点,经常出一些很边缘的数值来麻痹我们,按照教科书的常规解法为负数的补码最高位为1,其数值部分由它的反码加1形成,如-127的原码为11111111B,则反码为10000000B,所以对一个负数的反码求真值时,符号位不动,7个数值位取反即可;

         -127的补码为其反码+1,即10000001B,如果按照常规算法,10000000B和00000000B都表示0(分别为-0和+0),在实际运算时这二者是相等的,秉承不冗余的唯一原则,规定10000000B不再表示-0,而是-128,注意这里是说的补码,即-128的补码为10000000B,我们可以将补码连同符号位看作一个数,只是用最高位加以区别。如-128的最高位为1,表示其为负数,2^7=128,所以它的值为-128,再如-4的补码为11111100B,就相当于-128+(64+32+16+8+4);

          当一个数要减去另一个数时,只要加上其反码就可以了,这对于加减运算极其方便,比如7-19,就相当于7+(-19)的补码,即00000111B+11101101B,结果为F4H,这时为补码,转换为原码为-12,结果正确;负数的原码和补码之间的转换如果按照他们三者之间的关系来做的话相当麻烦,很容易出错,这里就有一个好方法,对于原码,从低位到高位遇到第一个‘1’之前保留原数值(包括这个‘1’),之后除符号位外全部取反,这样便得到了该数的补码,反之亦可,大家可以试一下。

——————————————————   分割线   —————————————————————

2019.10.14更新

最近几篇手绘知识点--指针系列文章阅读量差异较大,比如第二篇耗费大量精力最终木有过百,心凉啊。。。

刚创建了一个公众号,一开始的文章是和csdn博客同步的,后续会着重来做这一块,比如发布第一手信息,抽个奖啥的,希望各位小伙伴支持一下,加个关注,如果能帮忙宣传一下就更完美了,爱你们,还是那句话,让我们一起努力,共同进步~

公众号为“非著名IT表演艺术家”,比较中二的名字,就是灵光一闪,然后这个名字就冒出来了……

大家也可以扫码关注,拜托了:

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond_LH

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值