模运算和补码,完全不知道怎么解决,请详细回答。
首先,对于n位二进制数表示的正数和负数(即负数),补数之和等于2的n次方。
比如4位数分别代表1和-1,它们的补数分别是0001和111,和就是10000,真的等于2的四次方。这是一个字面上的结果,但是物理硬件只有4位,“与”1的最高位被丢弃,剩下的4位就是最终的结果0。从数学的角度来说,是2的四次方的模运算(即除以16后得到余数),结果是0。这符合1+(-1)=0的数学规律。
说n多废话,只要用第一段的结论,反过来做减法,就找不到负数的补数了吗?正数的补数就是它本身,没有人会为如何求正数的补数而头疼。
比如4位数中-1的补码是10000-1 = 111。你看书中的三个例子,都是这样做的。不难,但是废话太多,让人头晕。
另外,还有一种方法是从原码和反码得到补码,不用减法,这可能是累加器得名的原因。