-1

什么等价于没有 ixor~

if(~(i3 + -1) < -1) { ... }

.

会是这个吗?

if((i3 + 1) > 0)  { ... }

或者(怀疑这个?)

if((i3 + 0) > 0)  { ... }

或者(怀疑这个?)

if(i3 < -1)  { ... }

谢谢,我自己不能真正测试它,我可以.. 但我正在写一个反混淆器,我想 100% 确定。

4

3 回答 3

3

~x是 的按位(非逻辑)反转x。在二进制补码中,它等于-1 - x。尝试一下。

~0  = -1 -  0 = -1
~-1 = -1 - -1 = 0
~1  = -1 -  1 = -2

现在,将此应用于您的情况:

-1 - (i3 - 1) < -1
-1 - i3 + 1   < -1   # commutative property of multiplication
   - i3       < -1   # 1 + -1 == 0
     i3       >  1   # * -1 inverts everything, including the inequality

请注意,这仅适用于数字是二进制补码的情况——但如今几乎所有 CPU(和大多数编程语言)都以这种方式运行。

于 2011-07-18T06:36:18.667 回答
0

首先,我假设这是 Java 并且那i3是一个int(与byte,short或相同long)。

i3 + -1i3-1这将是一些整数。 ~按位不是。所以我们减去了一个并否定了所有的位。这与否定二进制补码数完全相反。(否定一个二进制补码通常是通过加 1 然后补码来完成的)。幸运的是,这个运算是它自己的逆运算,所以做相反的事情也是一种否定数字的 2 补码的方法。所以我们最终得到了-i3.

剩下-i3 < -1的就是i3 > 1尽可能不混淆的。

于 2011-07-18T06:39:49.567 回答
0

~x实际上是-x - 1 因此,-(i3 - 1)等价于-(i3 - 1) - 1whcih 等于-i3 So,

if(~(i3 + -1) < -1) { ... } 

相当于:

if(-i3 < -1) { ... } // or simply if(i3 > 1) { ... }
于 2011-07-18T06:53:16.173 回答