概述
鸡蛋叫鸡蛋是因为,生它的叫chicken
总结
- 从原码得到反码的办法不只有按位取反
- 补码可以(减去原码)一步得到, 只不过对计算机来说, 取反加一来得更容易
- 相同位数的原码加上其补码结果相同, 去掉最高位的1, 达成清零
- 相同位数的原码加上其反码结果也相同, 且等于原码加补码减一
让我们先把鸡和二进制抛到一边
在数学上学过, 互补角,指同一平面内的两个角相加的和等于180度。
我们可以认为: 在同一平面内, 30°
的角和150°
的角互补
把互补的概念拓宽一点, 在90
以内数, 我们认为30
和60
互补(故意的哟, 就不叫它互余)
10
以内呢, 10
和0
我们可以看作是一对互补的数, 7
和3
也可以看作是一对互补的数
来, 让我们的目光瞄向十进制, 对的没错, 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
减出来的是补码
- 为什么会出现
-8
?区间为什么是[-8,7]
?
答: 四位二进制数能表示16位不同的数, 从0掰开两半, 我们知道的, 一边是7
另一边就得是8
.如果0
我们用+0
→ 补码0000
表示, 补码1000
就要表示-8
咯, (-8
只有补码, 没有原码, 原码的1000
表示-0
)负数 原码 补码 -1 1001 1111 -2 1010 1110 -3 1011 1101 -4 1100 1100 -5 1101 1011 -6 1110 1010 -7 1111 1001
2. 补码为什么是反码加一呢? 因为反码和原码不互补啊…(开个玩笑)
2. 补码是原码的反码加一, 为什么对补码进行相同的操作能还原出原码?(为什么补码取补是原码?)
答: 这个问题相当于, 60
°的补角是120°
, 120°
取补居然得到60°
, 原因是它们互补呗
3. 我们都是从原码得到反码, 再从反码得到补码的? 能否从原码到补码再得到反码呢?
答: 用1 1000
减去原码得到补码, 补码减一得到反码
为
什
么
我
会
闲
得
无
聊
把
原
码
、
反
码
、
补
码
加
来
加
去
呢
?
color{#FF7D00}{为什么我会闲得无聊把原码、反码、补码加来加去呢?}
为什么我会闲得无聊把原码、反码、补码加来加去呢?
此
文
为
胡
思
乱
想
之
作
,
欢
迎
指
正
color{#00FFFF}{此文为胡思乱想之作, 欢迎指正}
此文为胡思乱想之作,欢迎指正
最后
以上就是落后巨人为你收集整理的鸡蛋为什么叫鸡蛋,补码为什么叫补码?的全部内容,希望文章能够帮你解决鸡蛋为什么叫鸡蛋,补码为什么叫补码?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复