二进制补码十六进制减法

Two's Complement Hex Subtraction

我在看

0x0 - 0x21524111

在二人制系统中。我知道答案 (DEADBEEF),但我不确定如何有效地计算出这些类型的减法。不能用0x0做结转,我应该怎么做才能得到结果?

二进制补码系统中的任何减法实际上只是补码的加法。你需要做的是取 0x21524111 的倒数变成 0xDEADBEEF,然后把它加到 0x0 上,0x0 仍然是 0xDEADBEEF。

编辑:添加 'inverse' 表示二进制补码,这意味着 -a 实际上是 ~a + 1

二进制补码的要点是通过使取负数变得容易,从而使减法变得容易。

一般来说,如果你有一个数字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