补码的加减法运算
推荐于2017-11-26
所谓的“补码”,并非是“什么码”,而是正常的二进制数。
计算机使用二进制数。
八位数的范围是: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。
这些一对一对的数,正是“负数的补码”。
**重要的问题说三遍:************
*** 舍弃了进位,“补码”就出来了! ***
*** 舍弃了进位,“补码”就出来了! ***
*** 舍弃了进位,“补码”就出来了! ***
***********************
由此可知,“负数的补码”,它本来就是“无符号数”。
不用说,“零和正数的补码”,当然也是“无符号数”。
因此,“补码”的运算,也就要按照无符号数来运算,即:逢二进一。
“补码”,并不是由谁引入的,也不是由原码取反加一得来的。
“补码”的来源,极其简单!
就是:计算机专家一时马虎,漏掉了符号位,“补码”就出来了。
但是,老外的算术水平太洼了,弄不清楚进位的事。 百般无奈,只好编造了:“机器数真值有符号数符号位正零负零原码反码补码正数三码相同负数取反加一符号位不变模同余符号位也参加运算时针倒拨正拨 ... ”
这些,都是毫无用处的垃圾概念!
你就是把它们都背熟了、都会做了,你也不知道:加、减法,是怎么转换的。
当然,你如果能当上计算机老师,你就可以用这些,再去忽悠下一代学生。