看起来正常整数(按位运算)给定一个整数n及其掩码k(一个字节:负数为1111 1111,正数为0000 0000)
(n ^ K) - K = (n + K) ^ K
这通常用于计算数字n的绝对值,以K为掩模。我的问题是:为什么上面的表达有效?为什么这两个术语相同?
答案 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 = ~0
和n + k
存在整数溢出。因此,它会导致不确定的行为。