将数字5
设为b101
,如何从某个位置更改它的任何位?例如:change(3)
会将其设为b100
。
答案 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所有位,因此翻转最低有效位。