计算机原码反码补码怎么算的?
补码,其实,就是一个“代替负数进行运算”的正数。
使用了补码(正数)之后,在计算机中,就没有负数了。
随之而来的,就是:减法运算也都不存在了。
所以,借助于补码,计算机只需要配置一个加法器,就能走遍天下。
使用补码的目的,就是:简化计算机的硬件。
而原码、反码,都没有这种功能,所以,计算机中,根本就不用它们。
所以,原码和反码,只能在纸上写一写,在计算机中,都是不存在的。
---------------------
补码(一个正数),怎么就能代替负数呢?
你看时针:倒拨 3 小时,可以用正拨 9 小时代替吧?
你看三角函数:-π/2、+3π/2,两者的函数值也是相同的。
10 进制数,如果限定只用 2 位 ,那么就会有:
25 - 1 = 24
25 + 99 = (一百) 24
如果忽略进位一百(10^2),+99 就可以代替-1。
上面所说的这些正数,就是“负数的补数”。
求补数的公式是: 补数(即正数)= 负数 + 周期。
正数,必须直接就参加运算,不可再做任何变换。
就是说:正数,本身就已经是正数了,它并不存在什么补数。
---------------------
计算机用二进制,补数,那就称为“补码”了。
8 位 2 进制的周期,是:2^8 = 256。
8 位 2 进制,总共可以组成 256 个代码。
用其中的一半(即 128 个)代表负数:-1 ~ -128。
那么:
-1 的补码,就是:-1 + 256 = 255 = 1111 1111(二进制)。
-2 的补码是:-2 + 256 = 254 = 1111 1110。
。。。
-128 的补码,就是:128 = 1000 0000。
---------------------
至此,你就可以推出“补码的定义式”:
当 X >= 0, [ X ]补 = X; 零和正数不用变换。
当 X < 0, [ X ]补 = X + 2^n。 n 是补码的位数。
这是通用的公式。
在严谨一点的书上,也有这种公式,你去翻翻书吧。
---------------------
按照公式求补码,是极为简便的,而且还能理解补码的意义。
由补码,求其代表的数值,也是很方便的。
那么,就不要学“原码反码取反加一符号位不变”了。
况且,原码和反码比补码,还少了一个数,取反加一,也无法使用。
只有那些数学不好的老外,才弄这些“隔路”的花样。
实际上,只要会“补码与数值”的互换,就够用了。
---------------------
算式 5 - 7 =-2,计算机用八位补码计算如下:
5 = 0000 0101
[-7]补码 = 1111 1001
--相加-----------
得: (1) 1111 1110 = [-2]补码
舍弃了进位,结果,就是正确的。
所谓的“补码”,并非是“什么码”,而是正常的二进制数。
计算机使用二进制数。
八位数的范围是:0000 0000 ~ 1111 1111。
相当于十进制数:0 ~ 255。
出现进位,就是:2^8 = 256。
这些数,既没有小数点,也没有什么符号位。所以,它们都属于:无符号整数。
计算机中,只有加法器。运算规则就是:逢二进一。
两个八位数相加,竖式如下:
27 + 255,出现了进位 256。 和,就是:256 + 26 = 282。
本次计算,显然就是:无符号数的加法。 运算结果,非常正确。
.
但是,如果你忽略了进位(或者说舍弃了进位)呢?
不算进位,和,就少了 256。 这也就是:减去了 256。
那么,此时的和,就是:27 + 255-256 = 27-1 = 26。
所以,此时,实际上,就是【减法运算】!
由此,你就知道,“补码”的原理是什么了。
.
既然,加上 255,就是“减一”,
推广,+254 (1111 1110),就是-2 了。
还有,+253 (1111 1101),就是-3 了。
。。。 。。。
最后,128 (1000 0000),就是-128。
这些一对一对的数,正是“负数的补码”。
**重要的问题说三遍:************
*** 舍弃了进位,“补码”就出来了! ***
*** 舍弃了进位,“补码”就出来了! ***
*** 舍弃了进位,“补码”就出来了! ***
***********************
由此可知,“负数的补码”,它本来就是“无符号数”。
不用说,“零和正数的补码”,当然也是“无符号数”。
因此,“补码”的运算,也就要按照无符号数来运算,即:逢二进一。
“补码”,并不是由谁引入的,也不是由原码取反加一得来的。
“补码”的来源,极其简单!
就是,计算机专家一时疏忽,漏掉了符号位,“补码”就出来了。
但是,老外的算术水平太洼了,弄不清楚进位的事。 百般无奈,只好编造了:“机器数真值有符号数符号位正零负零原码反码补码正数三码相同负数取反加一符号位不变模同余符号位也参加运算时针倒拨正拨 ... ”
这些,都是毫无用处的垃圾概念!
你就是把它们都背熟了、都会做了,你也不知道:加、减法,是怎么转换的。
当然,你如果能当上计算机老师,你就可以用这些,再去忽悠下一代学生。