在java中使用int进行位操作

时间:2011-11-02 16:52:43

标签: java bit-manipulation

我有一个int,我想使用〜位运算符反转它的位。这应该是一个非常简单的事情,但是我尝试过它并不起作用。我想这是因为java使用两个补码来表示它的int。那么最有效的方法是什么?反转50时应该是13,这是我想要的值

3 个答案:

答案 0 :(得分:2)

似乎你只需要按位补码的一部分,直到输入的最有意义的设置位。然后你只需掩盖补充,

int invert(int n) {
    return ~n & mask(n);
}
int mask(int n) {
    n |= n >> 1;
    n |= n >> 2;
    n |= n >> 4;
    n |= n >> 8;
    return n | (n >> 16);
}

答案 1 :(得分:0)

Java int为32位长,1位用于符号。因此,50以二进制表示为00000000000000000000000000110010。如果你对它进行位反转,你将获得11111111111111111111111111001101,这是十进制表示法中的java整数值-51。

答案 2 :(得分:-2)

由于int应该至少为32位宽,~50绝对不是13.我认为你假设int只有8位宽,这可能就是这种情况237年前,但绝对不是现在,而不是Java,无论如何。如果您需要保证8位宽的数据类型,请使用byte

但即使这样,~50也不是13,只有将最低6位考虑在内。但所有这些都与二人的补充无关。