我正在看
0x0 - 0x21524111
在双人的comp系统中。我知道答案(DEADBEEF),但我不确定如何有效地找出这些类型的减法。由于我不能用0x0进行结转,我该怎么做才能得到结果?
答案 0 :(得分:3)
两个补码的要点是通过简化数字的负数来简化减法。
一般情况下,如果您的号码为i
,则可以通过反转-i
的所有位并添加1来找到i
。
例如,如果i = 0x21524111
,则为-i = ~0x21524111 + 1
。自a - b = a + (-b)
起,您只需将-0x21524111
添加到0
。
a = 0
b = 0x21524111
c = ~b + 1
print a + c
print a - b
答案 1 :(得分:2)
双补体系统中的任何减法实际上只是补充的补充。你需要做的是取0x21524111的反转,它变为0xDEADBEEF,然后将它加到0x0,它仍然是0xDEADBEEF。
编辑:添加'反向'表示两个补码,这意味着-a
确实是~a + 1