数字xor K - K =数字+ K x或K,为什么?

时间:2013-02-27 14:02:41

标签: c++ c bit-manipulation

看起来正常整数(按位运算)给定一个整数n及其掩码k(一个字节:负数为1111 1111,正数为0000 0000)

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

这通常用于计算数字n的绝对值,以K为掩模。我的问题是:为什么上面的表达有效?为什么这两个术语相同?

3 个答案:

答案 0 :(得分:4)

您似乎只对k:0和-1的2个值感兴趣。

对于k = 0:(n^0)-0=(n+0)^0,确定。

对于k = -1,从n^-1==~n开始,重写为~n+1=~(n-1),尝试在两边添加n-1并注意n + ~n == - 。

答案 1 :(得分: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错了!

答案 2 :(得分:0)

k = ~0n + k存在整数溢出。因此,它会导致不确定的行为。