what?(是什么)
先来个感性认识:
如果把路线A-B-D称为“原码”,
那路线D-B-A就是“反码”
A-C-D就是“补码”
均是一种编码形式,规则为:符号位+数值位
符号位:0代表正数,1代表负数
数值位:二进制的数
比如 0 0000111 代表 +7
——————————————————————————————————————————————
why?(出现的必然)
就像我们要想和一个只懂英语的人交流,就需要把中文翻译为英文,
如果我们想和只懂0、1的计算机交流,就需要把十进制的数翻译为二进制的。
举个栗子,我们想对计算机说“7”,需要说成“0 0000111”,后者就是原码。
反码的作用是将“减法”的问题变为“加法”的问题,因为计算机cpu的运算器中只有加法器,换句话说,计算机只能做加法。
[哈哈,有没有一种作为人类的自豪感……]
如:
10-4=10+(-4)
(10-4)补=(10)补+(-4)补=00001010 + 1111 1100=0000 0110补=0000 0110反=0000 0110原=6
[这句是在网上看的,小仙女表示不懂,脑袋转不过来]
补码:似乎和反码要解决的问题是一样的。
——————————————————————————————————————————————
how?(怎么运作的,使用规则)
正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同
负整数的原码,反码和补码计算,先求原码,再求反码,最后求补码
小结
(1)对二进制和十进制转换不明白的童鞋可以看:http://jingyan.baidu.com/article/597a0643614568312b5243c0.html
(2)how部分借鉴了:http://jingyan.baidu.com/article/1e5468f90a9568484861b77c.html
(3)学习这段知识的感受:
有些时候就会觉得,计算机的世界是简洁和严丝吻合的,也或许,每个世界都有自己的规则,要想更好地在其内生活下去,只要知道并遵守其规则就行。
这就像一个原始人类来到人类社会,他如果能按照人类社会的规则行走,
比如红灯停绿灯行,而不是横冲直撞;
比如到商店拿了东西付钱,而不是拿了就走;
……
那他就能在人类社会生活下去。
当保证了基本的生存以后,他也能进行创造,比如写首诗,编个篮筐等。
这或许和我们人类去计算机的世界生活的道理是一样的。