2014-11-24 35 views

回答

11

這很容易理解,當我們看一看所有的位運算符:

& bitwise AND 
| bitwise OR 
^ bitwise XOR 
&^ bit clear (AND NOT) 
  1. 位與(&):結果爲1時,這兩個操作數位爲1,否則結果爲0 。
  2. 按位或(|):結果是1時,至少一個操作數位爲1,否則爲0如果兩個操作數位爲0
  3. 按位XOR(^):結果是1時一個且僅一個操作數位是1,否則結果是i這三個運算符(&, |, ^)產生相同的結果,與操作數位的順序無關。
  4. 按位與NOT(&^):結果是1時,第一操作數位是1,並且第二個操作數位是0;否則結果爲0.請注意,操作數位的順序會影響結果。對於結果爲1,第一個操作數位必須是1和第二必須爲0

這裏的代碼,also on the Go Playground,演示位運算符的行爲:

package main 

import "fmt" 

func main() { 
    fmt.Println(`AND`) 
    fmt.Printf("%b & %b results in %03b\n", 4, 5, 4&5) 
    fmt.Printf("%b & %b results in %03b\n", 5, 4, 5&4) 
    fmt.Println(`OR`) 
    fmt.Printf("%b | %b results in %03b\n", 4, 5, 4|5) 
    fmt.Printf("%b | %b results in %03b\n", 5, 4, 5|4) 
    fmt.Println(`XOR`) 
    fmt.Printf("%b^%b results in %03b\n", 4, 5, 4^5) 
    fmt.Printf("%b^%b results in %03b\n", 5, 4, 5^4) 
    fmt.Println(`AND NOT`) 
    fmt.Printf("%b &^ %b results in %03b\n", 7, 5, 7&^5) 
    fmt.Printf("%b &^ %b results in %03b\n", 5, 7, 5&^7) 
} 

通過運行上述代碼所產生的輸出是:

AND 
100 & 101 results in 100 
101 & 100 results in 100 
OR 
100 | 101 results in 101 
101 | 100 results in 101 
XOR 
100^101 results in 001 
101^100 results in 001 
AND NOT 
111 &^ 101 results in 010 
101 &^ 111 results in 000 

最後,&^=是SH或者分配操作員。例如,x = x &^ y可以替換爲x &^= y

1

spec says自己是位明確運營商:

&^ bit clear (AND NOT) integers 

你會使用他們作爲一個位標誌值的一部分。您可以使用or打開某個位,然後使用and not將其關閉。

相關問題