鸡蛋为什么叫鸡蛋,补码为什么叫补码?

鸡蛋叫鸡蛋是因为,生它的叫chicken

总结

  • 从原码得到反码的办法不只有按位取反
  • 补码可以(减去原码)一步得到, 只不过对计算机来说, 取反加一来得更容易
  • 相同位数的原码加上其补码结果相同, 去掉最高位的1, 达成清零
  • 相同位数的原码加上其反码结果也相同, 且等于原码加补码减一

让我们先把鸡和二进制抛到一边

在数学上学过, 互补角,指同一平面内的两个角相加的和等于180度。
我们可以认为: 在同一平面内, 30°的角和150°的角互补

把互补的概念拓宽一点, 在90以内数, 我们认为3060互补(故意的哟, 就不叫它互余)
10以内呢, 100 我们可以看作是一对互补的数, 73 也可以看作是一对互补的数


来, 让我们的目光瞄向十进制, 对的没错, 5的补码是5
恭喜你, 回家等消息, 我们决定录取你的时候会通知你……
你不服? 好吧, 答案是: 0000 0101

好吧, 再给你一次机会, -5的反码是什么? 1111 1010
恭喜你, 但是没奖励
-5 的原码1000 0101和反码1111 1010有什么关系, 照本宣科: 除了符号位以外, 按位取反
当然, 这没有错, 取反,怎么取反(逻辑电路中有个很好用的东西叫: 非门), 我们来看看另一种取反方法: 除符号位以外, 按位做 1-x 操作, 同样的, 很顺利的把我们的原码变成了反码

1 为什么是 1,而不是2, 额…

假设我们不录取你了, 噢, 不对, 抛开二进制, 假设十进制也有原码, 反码, 补码的概念的话

我们想知道-55反码是什么,按位取反, 要用什么数来减去每一位数呢? 当然不是10, 因为上面是1而不是2, 所以我们能用9来获得-55的反码为944,我们成功把负号去掉了(首字符为符号位0表示正数, 9表示负数)
再假设-55的补码为944+1, 我们得到:

// 十进制负数, 已去除符号位 --------
2 + 7 = 9      // 原码加反码
7 + 3 = 10     // 原码加补码

// 下面是两位十进制数
9 55() + 9 44() = (18) 99
9 55() + 9 45() = (19) 00

结论: 1. 一位原码 + 一位反码 = 进制中能出现的最大的数
2. 一位原码 + 一位补码 = 几进制就是几(算上溢出位)
3. 一位反码和一位补码呢, 嗯… (2*反码+1)
4. 十进制数在去除符号位的情况下, 原码加反码为999···, 原码加补码为000··· (这也许就是: 我把首字符为符号位0表示正数,9表示负数的原因?)


让我们把二进制和鸡抓回来, 噢, 鸡不要

4位运算器, 区间是[1000,0111][-8, 7]
话说,1000的补码是什么?(不要告诉我的老师, 嘘)
随便来个数-6, 原码1110, 反码1001, 补码1010, 那么, 加起来

// 原码加反码(-6)
1110 + 1001 = 1 0111 = 0111 // 7是上边区间最右边的数
// 原码舍去符号位为6, 反码为 1, 6+1=7 (你将得到7, 也必将得到7)
// 原码加补码(-6)
1110 + 1010 = 1 1000 = 1000// -8是区间最左边的数 

结论:
1.(带符号)任何进制, 对每一个固定位数的负数, 把符号位外的数加起来, 得到的这个数等于其能表示的最大正数
2.(带符号)任何进制, 数的补码减去原码符号位以外的数,加上符号位能得到反码,同样的道理, 我们能减去反码, 得到原码

结论:
3.对于负数原码加补码形式必然是11开头, 后面接一串0
4.用11, 后面接原码的位数减一个0减去原码得到补码
5.结合结论3和4和角的互补概念, 得: 原码与补码关于11000···互补

简言之,1 0111减出来的是反码,1 1000减出来的是补码


  1. 为什么会出现-8?区间为什么是[-8,7]?
    答: 四位二进制数能表示16位不同的数, 从0掰开两半, 我们知道的, 一边是7另一边就得是8 .如果0我们用+0 → 补码 0000表示, 补码1000就要表示-8咯, (-8只有补码, 没有原码, 原码的1000表示-0)
    负数原码补码
    -110011111
    -210101110
    -310111101
    -411001100
    -511011011
    -611101010
    -711111001

2. 补码为什么是反码加一呢? 因为反码和原码不互补啊…(开个玩笑)
2. 补码是原码的反码加一, 为什么对补码进行相同的操作能还原出原码?(为什么补码取补是原码?)
答: 这个问题相当于, 60°的补角是120°, 120°取补居然得到60°, 原因是它们互补呗
3. 我们都是从原码得到反码, 再从反码得到补码的? 能否从原码到补码再得到反码呢?
答: 用1 1000减去原码得到补码, 补码减一得到反码


为 什 么 我 会 闲 得 无 聊 把 原 码 、 反 码 、 补 码 加 来 加 去 呢 ? \color{#FF7D00}{为什么我会闲得无聊把原码、反码、补码加来加去呢?} ?
此 文 为 胡 思 乱 想 之 作 , 欢 迎 指 正 \color{#00FFFF}{此文为胡思乱想之作, 欢迎指正} ,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值