不能在Java上对Unsigned Int进行操作

时间:2017-11-05 20:40:19

标签: java bit-manipulation bitwise-operators

所以我现在~n给了我关于整数n的not操作,但有没有什么方法可以把它看成无符号的int?

例如~50,当我真正想要-51时,我得到13。有没有办法在Java中做到这一点?

例如,二进制50是110010。当数字反转时,我们应该得到001101

2 个答案:

答案 0 :(得分:1)

如果你想保持前导零位不变,你可以在'二进制不是'之后将它们设置为零。操作。我们所需要的只是创建11...1掩码,其数字1等于n中的有效位数,然后我们可以将所有其他位设置为零:

int invert(int n) {
    int mask = (Integer.highestOneBit(n) << 1) - 1;
    return (~n & mask);  
}

答案 1 :(得分:0)

有32位,所有那些租用的零都变为1。

int mask = Integer.highestOneBit(n) << 1:
return ~n & - - mask;