-4

似乎对于给定整数 n 及其掩码 k 的普通整数(按位运算)(一个字节:1111 1111 表示负数,0000 0000 表示正数)

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

这通常用于计算以 K 为掩码的数 n 的绝对值。我的问题是:为什么上述表达有效?为什么这两个术语是等价的?

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 回答