做而论道_CS:
所谓的:机器数符号位原码反码 ...
都是计算机专家在【忽悠、卖拐】而已。
正负数值,存入计算机,都是以 “补码” 存放的。
计算机中,根本就没有原码和反码。
除非,你自寻烦恼,偏要在计算机中,存入原码和反码。
既然没有原码反码,那么,取反加一,计算机也就不能做了。
其实,所谓的 “补码”,也是正常的数字。
也并非一定是二进制数。
你看十进制吧,两位数:0 ~ 99。
可以有:27 + 99 = (一百) 26
也可以:27 - 1 = 26
如果你忽略进位,依旧保持两位数,
这两种算法的功能,就是相同的!
就是说,当你舍弃了进位:
负数,就能用正数代替;
加法,竟然就能实现减法运算!
在计算机中,舍弃进位,会怎样?
就可以简化硬件。
用一个加法器,便可横行天下!
由此可知,“补码”,根本就不是什么新鲜事。
它并不是:符号位原码反码取反加一。
其关键,是:【舍弃进位】。
上过小学的,都懂这个!
------------
用两位十进制运算时,舍弃进位,就是【减去一百】。
那么,加 99,再减 100,当然就是 “-1” 了。
计算机使用二进制数。
八位二进制数是:0000 0000 ~ 1111 1111。
相当于十进制数:0 ~ 255。
如果出现 “进位 = 1”,就是:2^8 = 256。
那么,加 255,再减 256,这也就是 “-1” 了。
所以:+255 (1111 1111),就是:-1;
同理:+254 (1111 1110),就是:-2;
+253 (1111 1101),就是:-3;
。。。 。。。
+128 (1000 0000),即:-128。
以上这些正数,就是计算机专家 “发明” 的补码了。
你肯定能看出关系式:
负数的补码 = 256 + 该负数。
一般化,就是:
负数的补码 = 2^n + 该负数。
n,是二进制数的位数。
例:求-31 的 “补码” 是多少?
解:256-31 = 225 = 1110 0001 (二进制)。
这不就求出来了吗?
哪还用琢磨什么:符号位原码取反。。。!
还要啥自行车啊!
谁要是跟老外学算术,
立刻、马上、直接,就掉坑里去了!