两个补码十六进制减法

时间:2017-08-03 22:35:55

标签: hex subtraction twos-complement

我正在看

0x0 - 0x21524111

在双人的comp系统中。我知道答案(DEADBEEF),但我不确定如何有效地找出这些类型的减法。由于我不能用0x0进行结转,我该怎么做才能得到结果?

2 个答案:

答案 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