似乎与给定的一个整数n正常整数(按位操作)及其掩码K(一个字节:1111 1111为负数和0000 0000为正的)number xor K - K = number + K xor K,为什么?
(n^K) - K = (n + K)^K
并且这通常用来以K作为掩码计算数字n的绝对值。我的问题是:为什么上述表达式起作用?为什么这两个术语是相同的?
似乎与给定的一个整数n正常整数(按位操作)及其掩码K(一个字节:1111 1111为负数和0000 0000为正的)number xor K - K = number + K xor K,为什么?
(n^K) - K = (n + K)^K
并且这通常用来以K作为掩码计算数字n的绝对值。我的问题是:为什么上述表达式起作用?为什么这两个术语是相同的?
您只对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。
我认为这不是事实。对于
(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
这是公式的前提条件。
编辑
我犯了一个错误,异或不与减法配电台。 (a - b)^c = a^c - b^c
是错的!
存在整数溢出k = ~0
和n + k
。所以会导致一个未定义的行为。
什么是异常整数? – 2013-02-27 14:04:14
什么是n和K? – 2013-02-27 14:04:42
对于n = K = 1似乎不正确...... – 2013-02-27 14:06:01