-4

整数 n とそのマスク k (1 バイト: 負の数の場合は 1111 1111 、正の数の場合は 0000 0000 ) が与えられた通常の整数 (ビット演算) のようです。

(n ^ K) - K = (n + K) ^ K

これは、K をマスクとして数値 n の絶対値を計算するためによく使用されます。私の質問は、なぜ上記の式が機能するのですか? これら 2 つの用語が等しいのはなぜですか?

4

3 に答える 3

4

k の 2 つの値 (0 と -1) だけに関心があるようです。

k=0 の場合: (n^0)-0=(n+0)^0、わかりました。

k=-1 の場合、 であるためn^-1==~n、これは と書き換えます~n+1=~(n-1)。両側に n-1 を追加してみて、n+~n==-1 であることに注意してください。

于 2013-02-27T14:16:10.113 に答える
1

そうではないと思います。為に

(n ^ k) - k = (n + k) ^ k =>
((n ^ k) - k) ^ k) = (n + k) ^ k ^k =>
(n ^ k) ^ k - k ^ k = n + k => ### WRONG
n ^ k - 0 = n + k =>
n ^ k = n + k =>
n & k = 0

それが方程式の前提条件です。

編集

xor は減算で分配的でないという間違いを犯しました。(a - b) ^ c = a ^ c - b ^ c間違っている!

于 2013-02-27T14:11:47.583 に答える
0

と の整数オーバーフローがk = ~0ありn + kます。したがって、未定義の動作につながります。

于 2013-02-27T14:19:42.840 に答える