我有一个整数,我想将其中的1位从0切换为1或从1切换为0.我不知道它的状态。我如何在一份声明中这样做?
& | ~ ^
if else
(添加了xor运算符)
答案 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);
}
(根据需要内联此表达式。)