如何在整数中切换一点?

时间:2013-05-20 22:14:43

标签: integer bit-manipulation

我有一个整数,我想将其中的1位从0切换为1或从1切换为0.我不知道它的状态。我如何在一份声明中这样做?

  • 使用& | ~ ^
  • 避免if else

(添加了xor运算符)

4 个答案:

答案 0 :(得分:4)

这是一项常见操作,并且提供了充足的指导。例如,here

设置位

bit_fld |= (1 << n)

清除一点

bit_fld &= ~(1 << n)

稍微切换

bit_fld ^= (1 << n)

测试一下

bit_fld & (1 << n)

答案 1 :(得分:3)

如果您只想切换特定位,请使用XOR^)操作。查看XOR真值表以找出答案。

答案 2 :(得分:1)

设置位使用按位OR运算符(|)设置位。

number |= 1 << x;

这将设置位x。

要清除一点,请使用按位AND运算符(&amp;)清除一位。

number &= ~(1 << x);

这将清除位x。必须使用按位NOT运算符(〜)反转位串,然后运行AND。

切换

The XOR operator (^) can be used to toggle a bit.

数字^ = 1&lt;&lt; X;

答案 3 :(得分:0)

要翻转一下,您可以使用另一个数字将输入数字与您正在翻转的位进行异或。 Java based example

int a = 0b1001;
System.out.println(Integer.toBinaryString(a));
a = a ^ 0b0100; // flip third LSB
System.out.println(Integer.toBinaryString(a));
a = a ^ 0b0100; // flip it back
System.out.println(Integer.toBinaryString(a));

XOR不是您提及的允许运营商之一,但can be defined in terms of them (example)

int xor(int p, int q) {
    return (p & ~q) | (~p & q);
}

(根据需要内联此表达式。)