【问题标题】:Java IXOR ~ [one side] equality refactoring questionJava IXOR~【一方面】等式重构问题
【发布时间】:2026-02-13 08:35:01
【问题描述】:
public byte[] method(int var1)
{
        if(var1 == ~L.length) //<- this
            return a(i1, 0, false);
}

我将如何修复

if(var1 == ~L.length)

删除~

我必须将== 更改为!= 吗?

if(var1 != L.length)

谢谢,这可能是这种类型的最后一个问题。

ps.> 感谢您帮助我解决以前的问题,例如

~(-1 + var1) &lt; -1var1 &gt; 1

~(var1 &amp; 0x22) != -1(var1 &amp; 0x22) != 0

~var1 &lt; ~var2var1 &gt; var2

【问题讨论】:

    标签: java refactoring deobfuscation


    【解决方案1】:

    正如我之前告诉你的,你可以用-x - 1替换~x

    所以,if(var1 == ~L.length) 等价于 if(var1 == -L.length - 1)

    【讨论】:

    • 哈哈,我讨厌看到同样的面孔.. 让我看起来像一个比以往更大的傻瓜。
    • if(var1 == -L.length - 1) 似乎更复杂
    • 然后使用if(var1 + 1 == -L.length)
    • Ohhhhhhh 我终于明白了,总是用 -var - 1 替换 ~var 并从那里继续工作。
    【解决方案2】:

    如果它再次尝试做 2 的补码技巧:

    -var1 == L.length + 1
    

    var1 + 1 == -L.length
    

    (基本上用~x == -(x+1) == -x - 1这个事实)

    另一种重写方式是:

    var1 ^ L.length == -1
    

    【讨论】: