二进制补码十六进制减法
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
我在看
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