补码.原码.反码怎么运算的啊.详细一点
补码、原码、反码,这些都是计算机专家创造的词汇。
事实上,它们,都不应该存在。
计算机的运算,是很简单的,和这些词汇,并没有任何关系。
--------------------------
你想象一下:
有一个小朋友,很小的,大概是三岁吧。
他只会数一百个数(0~99),会加法,还不会做减法。
那么,你可以这样教他:加 99,就是减一。
比如: 25 - 1 = 24
25 + 99 = (一百) 24
他忽略了进位,只取 2 位数,结果,就是正确的。
--------------------------
上面是一个简单的例子,却说明了一个事实:
做计算时,限定了位数,正数,就能当做负数使用。
限定了位数,有两个意义:
数值是循环的,具有周期性;
有没有进位,都不必考虑。
代替负数的正数,可称为:负数的补数。
计算公式: 补数 = 负数 + 周期。
--------------------------
在计算机中,把 8 位 2 进制,称为一个字节。
计数值是:0000 0000~1111 1111。
十进制是:0 ~ 255。
计数周期:2^8 = 256。
此时,共有 256 的机器数。
较大的 128 个,就可以代表负数了:
-1 补码就是:-1 + 256 = 255 = 1111 1111。
-2 的补码 = 254 = 1111 1110。
。。。
-128 的补码 = 128 = 1000 0000。
较小的 128 个,就代表自身数值了:0 ~ 127。
--------------------------
减法算式: 5 - 7 = -2, 用 8 位补码计算如下:
5 = 0000 0101
-7 的补码 = 1111 1001
--相加---------------
得: (0) 1111 1101 = -2 的补码
在这里,用加法代替了减法,略去进位,结果,就完全正确。
--------------------------
计算机中,用正数(补码)代替负数,减法运算也就没有了。
因此,计算机的硬件,就可以得到简化了。
所以,在计算机系统中,数值,一律采用补码表示和存储。
原码和反码,都是不用的。
它们,计算机中,根本就不存在。
--------------------------
什么是补码? 为什么要用补码?
看完上面的介绍,相信你都有了答案。
那么,原码和反码,就没有任何意义了。
这两种代码,只是用来求补码的过渡而已。
其实,原码和反码,还有“取反加一”,都是“鸡肋”。
学习这些,浪费时间不少,却不懂【补码的意义】是什么。
特别是用“取反加一”求 0 和-128 的补码,就办不到了。
-128,有补码,却没有原码和反码,拿什么取反加一?
-0 的补码,求出来是 0000 0000。
符号位居然是 0 !
难道,负零,是正数吗?
有人说,零,不分正负,所有只有一个补码。
那么,原码反码,为什么有两个零?
--------------------------
其实,原码反码取反加一,就是一大篇自相矛盾的谬论。
老外数学不好,由此可见一斑。