更改一个数字的位

时间:2014-03-20 21:04:36

标签: java bits

将数字5设为b101,如何从某个位置更改它的任何位?例如:change(3)会将其设为b100

3 个答案:

答案 0 :(得分:3)

如果x包含您的号码,而n是您要更改的二进制数字,

public int change(int x, int n) {
    return x ^ (1 << n);
}

答案 1 :(得分:1)

这有点倒退。首先,位通常从0开始计数。它们也从右到左计数。

所以

Number: 1101101
Bit #:  6543210

从b101开始,更改“位3”将更改为b1101,您将从右侧开始计数。

更改位2将更改为b001。

如果是简单整数,则可以使用xor(^)运算符和shift-left(<<)。例如。 5 ^ (1 << 2)等于1

更一般地number ^ (1 << bitNum)。会给你number的值bitNum反转。

现在,如果你真的想从左边开始,你可以这样使用Integer.highestOneBit

number ^ (Integer.highestOneBit(number) >> (bitNum-1));这将与示例中的完全相同,但在number = 0时要小心。

答案 2 :(得分:0)

您可以使用xor masking执行此操作。

您可以执行以下操作:

int a = 0b101;
System.out.println(a);
int b = a ^ 0b001;
System.out.println(b);

这里a ^ 0b001 xors所有位,因此翻转最低有效位。