0

我有一个整数,我想将其中的 1 位从 0 切换到 1 或从 1 切换到 0。我不知道它的状态。我如何在 1 条语句中做到这一点?

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

(添加了异或运算符)

4

4 回答 4

4

这是一个常见的操作,并且有足够的指令可用。例如,这里.

设置一点

bit_fld |= (1 << n)

清一点

bit_fld &= ~(1 << n)

切换一下

bit_fld ^= (1 << n)

测试一下

bit_fld & (1 << n)
于 2013-05-20T22:18:53.857 回答
3

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

于 2013-05-20T22:22:45.730 回答
1

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

number |= 1 << x;

这将设置位 x。

要清除位,请使用按位与运算符 (&) 清除位。

number &= ~(1 << x);

这将清除位 x。您必须使用按位非运算符 (~) 反转位字符串,然后将其与。

切换一下

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

数字 ^= 1 << x;

于 2013-05-20T22:22:58.920 回答
0

要翻转一点,您可以将输入数字与另一个数字与您要翻转的位进行异或。基于 Java 的示例

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 不是您提到的允许的运算符之一,但可以根据它们定义 (示例)

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

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

于 2013-05-20T22:24:13.800 回答