做而论道_CS:
补码,只是一个 “代替负数” 的正数而已。
不仅仅是二进制数,在任意进制中,都有“补码”。
你看十进制数,两位的,就是:0~99。
可以有:27 + 99 = (一百) 26
也可以:27 - 1 = 26
如果你忽略进位,仍然保持两位数,
这两种算法的功能,就是相同的。
即,舍弃了进位:
正数,就能当做负数使用。
加法,就能完成减法运算。
在计算机中,舍弃进位呢?
计算机里面,就都是正数了,同时,也就都是加法运算了。
没有了负数,也没有了减法。减法器,当然就没有用处了。
计算机,只需配置一个加法器,便可横行天下!
--------------------
在两位十进制中,舍弃进位,就是:减去了一百。
那么,加 99,再减 100,当然就是“-1 ”了。
八位二进制,就是:0000 0000~1111 1111。
也就是十进制数的:0~255。
如果出现进位,即:2^8 = 256。
那么,加 255 (1111 1111),再舍弃 256,显然也是“-1 ”。
同理,+254 (1111 1110),就是-2。
。。。 。。。
这些个正数,就是计算机大佬 “发明” 的补码了。
--------------------
替换公式:负数的补码=2^8+该负数。
例:求-31 的补码是多少?
解:256-31 = 225 = 1110 0001 (二进制)。
完事!
--------------------
同样道理:正数的补码=2^8+该正数。
但是,正数加上 2^8,就会出现进位。
进位应该舍弃,那么,2^8 就不用加了。
所以,有:正数的补码=该正数。
这就证明了:零和正数的补码,就是其本身。
例题,就不用写了吧!
--------------------
舍弃进位,就是补码的来源和存在意义。
补码,与:机器数真值符号位原码反码取反加一 ...,
一丁点关系都没有!
老外的算术能力太洼了。
什么是进位、
什么舍弃进位,
他们都弄不懂。
所以,才编造了这么一大滩的垃圾!
谁要是跟老外学算术,立刻、马上。直接就掉沟里去了。