2017-08-03 119 views
1

我在一家二的補償系統看補碼十六進制減法

0x0 - 0x21524111 

。我知道答案(DEADBEEF),但我不確定如何有效地找出這些類型的減法。由於我不能用0x0做結轉,我應該怎麼做才能得到結果?

回答

2

二進制補碼系統中的任何減法實際上只是對補語的補充。你需要做的是取反0x21524111變成0xDEADBEEF,然後將它添加到仍然是0xDEADBEEF的0x0。

編輯:添加,該「逆」是指補這意味着-a真的是~a + 1

2

兩個互補的要點是使減法容易通過輕鬆獲得了許多負面。

一般來說,如果你有許多i,您可以通過反轉的i所有位並加1

例如,如果i = 0x21524111,然後-i = ~0x21524111 + 1找到-i。由於a - b = a + (-b),您只需將-0x21524111添加到0即可。

a = 0 
b = 0x21524111 
c = ~b + 1 
print a + c 
print a - b