一句两句 很难解释 让你看一篇博客吧 取其精华 去其糟粕
网页链接
或者请死记硬背下面几句话:
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
注意(请死记硬背):(-128)没有相对应的原码和反码,(-128) = (10000000)。
在计算机系统中,数值,一律采用补码来表示和存储。
原码和反码,在计算机中,都不存在。
原码和反码,都是什么,就不必关心了。
补码,就是一个“代替负数”的正数。
使用了补码之后,计算机中,就没有负数了,同时,也就没有减法运算了。
使用补码的目的,就是:简化硬件。
----------------
补码(正数),怎么就能代替负数呢?
用十进制来说明,比较容易理解。
你看:
25 - 1 = 24
25 + 99 = (一百) 24
你如果舍弃进位,+99 就能代替-1;加法,也就能代替减法。
同样,+98 也可以代替-2。
。。。
这些正数,就是“负数的补数”。
公式: 补数 = 负数 + 10^n, n 是补数的位数。
----------------------
计算机用二进制,补数,就叫做补码了。
对于 8 位 2 进制,补码 = 负数 + 2^8 = 负数 + 256。
所以,-1 的补码就是 255 = 1111 1111 (二进制)。
-2 的补码就是 1111 1110。
。。。
正数,不需要变换,必须直接参与运算。
所以,正数,它就没有补码。
----------------------
求 7-2 = 5,用补码计算如下:
+7 = 0000 0111
[-2]补 = 1111 1110
---相加-------------
得: (1) 0000 0101 = +5
舍弃进位,结果,就是非常正确的。
----------------------
补码,就是补码,与原码反码毫无关系。
补码,本来,是很简单的,也很容易理解的。
但是,从“原码反码取反加一。。。”来学习补码,就不容易理解了。
那么,“原码反码。。。”,是哪里来的?
老外脑子不好用,所以才弄出这些骚操作。