我目前正在阅读一本关于“小提琴”的书,并出现以下公式:
x-y = x+¬y+1
但这似乎不起作用。例如:
x = 0100
y = 0010
x-y = 0010
¬y = 1101
¬y+1 = 1110
x+1110 = 10010
但是10010 != 0010...
我在哪里犯了错误(如果有的话)?
(亨利·沃伦的这本书是“Hacker's Delight”。)
答案 0 :(得分:23)
你只有一个四位系统!最终结果左侧的额外1不能存在。它应该是:
x = 0100
y = 0010
~y = 1101
~y + 1 = 1110
x + 1110 = 0010
另一位溢出,不属于您的结果。您可能需要阅读two's complement arithmetic。
答案 1 :(得分:2)
你带着额外的一点。在真正的计算机上,如果你溢出这个词,那么这个位就会消失。 (实际上它会被保存在进位标志中。)。
答案 2 :(得分:2)
假设数字被限制为4位,那么第五个1
将被截断,留下0010
。
答案 3 :(得分:1)
这都是关于溢出的。你只有四位,所以它不是10010,而是0010。
答案 4 :(得分:1)
只需在2的补充系统中添加答案:
~x + 1 = -x
说x = 2
。在4位中,即0010
。
~x = 1101
~x + 1 = 1110
1110
是-2