此代码是否总是评估为false?这两个变量都是二进制补码整数。
~x + ~y == ~(x + y)
我觉得应该有一些满足条件的数字。我尝试测试之间的数字-5000
,5000
但从未实现平等。有没有办法建立方程式来找到条件的解?
将一个交换为另一个会在我的程序中引起隐患吗?
为了矛盾,假设存在x
一些y
(mod 2 n)使得
~(x+y) == ~x + ~y
用二进制补码*,我们知道,
-x == ~x + 1
<==> -1 == ~x + x
注意到这个结果,我们有,
~(x+y) == ~x + ~y
<==> ~(x+y) + (x+y) == ~x + ~y + (x+y)
<==> ~(x+y) + (x+y) == (~x + x) + (~y + y)
<==> ~(x+y) + (x+y) == -1 + -1
<==> ~(x+y) + (x+y) == -2
<==> -1 == -2
因此,存在矛盾。因此,~(x+y) != ~x + ~y
对于所有x
和y
(mod 2 n)。
*有趣的是,在具有补码算术的机器上,等式实际上对所有x
和成立y
。这是因为在一个人的补充下~x = -x
。因此,~x + ~y == -x + -y == -(x+y) == ~(x+y)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句