〜x +〜y ==〜(x + y)始终为假?

史蒂夫

此代码是否总是评估为false?这两个变量都是二进制补码整数。

~x + ~y == ~(x + y)

我觉得应该有一些满足条件的数字。我尝试测试之间的数字-50005000但从未实现平等。有没有办法建立方程式来找到条件的解?

将一个交换为另一个会在我的程序中引起隐患吗?

亚历克斯·洛克伍德

为了矛盾,假设存在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对于所有xy(mod 2 n)。


*有趣的是,在具有补码算术的机器上,等式实际上对所有x和成立y这是因为在一个人的补充下~x = -x因此,~x + ~y == -x + -y == -(x+y) == ~(x+y)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章