2013-05-20 15 views
0

我有一個整數,我想切換1位從0到1或從1到0.我不知道它的狀態。我如何在1條聲明中做到這一點?如何在整數中切換位?

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

(加入XOR運算)

+2

該讀像作業。 – travis

+0

@travis不是真正的優點。 (雖然考慮到禁忌,「太局部」也適用。) – millimoose

回答

4

這是一種常見的操作,並且有充足的可用指令。例如,here

設定位

bit_fld |= (1 << n) 

清除有點

bit_fld &= ~(1 << n) 

撥動了一下

bit_fld ^= (1 << n) 

測試了一下

bit_fld & (1 << n) 
+0

是的。我從來沒有使用過按位異或算子。謝謝! – n4pgamer

3

如果您只是想切換某個特定位然後使用XOR^)操作。查看XOR真值表來找出答案。

+0

刪除了我在答案中的c宏樣本,因爲我覺得這可能是一項家庭作業。 – yasouser

1

設置位使用位運算符(|)設置一個位。

number |= 1 << x; 

這將設置位x。

若要清除一點使用按位AND運算符(&)清除一點。

number &= ~(1 << x); 

這將清除位x。您必須用位運算符NOT(〜)反轉位串,然後進行與運算。

切換位

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

數^ = 1 < < X;

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); 
} 

(如內聯需要這種表達。)

相關問題