原码、反码与补码

1,原码:将十进制数值变成二进制数值之后的结果。

加入分配8个字节的内存,则
10的原码为00001010
-9的原码为10001001
其中第一位表示符号,0代表正数,1代表负数,后面7位用二进制数值(从右往左依次为 2 0 , 2 1 , . . . , 2 6 2^0, 2^1,...,2^6 20,21,...,26
注意10+(-9)的二进制计算结果为10010011(即-19)

2,反码:将原码中的符号位不变,其它位的0和1互换。

10的反码为01110101 (反码是用来处理负数的)
-9的反码为11110110
此时10+(-9)的二进制计算结果为00000000(即0)

3,补码:将反码加上1

10的补码为01110110 (补码也是用来处理负数的)
-9的补码为11110111
此时10+(-9)的二进制计算结果为00000001(即1)

Note: 反码和补码用来处理负数的,重要的事情说三遍。。。

从上可以看出使用补码完美地实现了整数的减法,反码是一个过渡态,对我们人来说,使用十进制直接加减很直观,对于二进制的机器来说,减法简直抓狂,(ಥ _ ಥ)。。。把负数换成补码形式就完美解决了。

Reference

这位知乎大神的回答幽默风趣:https://www.zhihu.com/question/20159860

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值