透彻理解原码、反码、补码

通常的定义为:
原码为正时,其补码就是原码本身
例如: 47原码为 00101111 补码为 00101111
当原码为负时,其补码为原码除符号位其它取反再加1
例如: -30原码为 10011110 补码为 11100010

如果不想硬背原码补码中那些取反+1的东西,可以接着看下去

But!!!!
很多人不能理解其原理
但其实在计算机中,本就没有原码的概念,所有数字都是按照补码存储的!

补码定义:
设A,B两个数字,若A+B恒等于一个规定的数,则称这两个数互为补码。

注意!这里的数字不是我们规定的原码。
所以你会发现正数的原码+补码不是一个固定的数字
但是负数的原码+补码恒等于100000000

那现在来抛开规定的原码转补码的理论!
数字5的二进制是 00000101
那么其补码是 100000000 - 00000101 = 11111011

11111011?
觉不觉得很熟悉?
这就是 -5 的补码

现在可以理解为在补码中 100000000 - A = -A
所以如果要求一个原码为负数的补码,直接求它绝对值的补码就行。

举个例子,-120的补码,就等于100000000 - 01111000(120的2进制) = 10001000

现在利用这种理论来看看二进制数的加法
例如 A + B(其中 A > 0,B < 0)

如果 A + B > 0
则这两个数字的补码之和肯定是大于100000000的
原因是将 A 拆分成(-B)加上另外一个值,带入到原式子中 其中B-B就等于100000000,再加上A拆分出的另外一个正值就肯定大于100000000,而我们认为B-B同时也等于0,所以相加结果多出来的那100000000我们便舍去了,只考虑后8位

如果 A + B < 0
则这两个数字的补码之和肯定是小于100000000的

综上所述,原码只是教程中用来方便我们理解补码的中间量,如果不想硬背那些取反+1的东西可以参考我上面的说明。
该文章为个人理解,若有错误欢迎讨论。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值