2017-08-03 1 views
1

私は2つのコンプシステムに2の補数進減算

0x0 - 0x21524111 

で探しています。私は答え(DEADBEEF)を知っていますが、私はこれらの減算を効率的に理解する方法は不明です。私は0x0でキャリーオーバーを行うことができないので、結果を得るにはどうすればよいですか?

答えて

2

2の補数系での減算は実際には補数の単なる追加です。あなたがする必要があるのは、0xDEADBEEFになる0x21524111の逆数をとり、それを0x0ADADBEEFである0x0に追加することです。

編集:それに追加するには、「逆」は-aを意味し、2の補数が本当に~a + 1

2

2の補数のポイントは、それが簡単数のマイナスを取得することにより減算が簡単に作ることであるであることを意味します。あなたは数iを持っている場合、一般的には

、あなたはその後-i = ~0x21524111 + 1i = 0x21524111場合、iのすべてのビットを反転し、例えば1

を追加することにより、-iを見つけることができます。 a - b = a + (-b)以降、-0x215241110に追加するだけです。

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