2 回答

TA貢獻1942條經(jīng)驗 獲得超3個贊
當我們查看所有按位運算符時,這會更容易理解:
& bitwise AND
| bitwise OR
^ bitwise XOR
&^ bit clear (AND NOT)
按位與 ( &):當兩個操作數(shù)位都為 1 時結(jié)果為 1,否則結(jié)果為 0。
按位或 ( |):當至少一個操作數(shù)位為 1 時結(jié)果為 1,否則如果兩個操作數(shù)位均為 0,則結(jié)果為 0。
按位異或 ( ^): 1 時結(jié)果為 1,只有一個操作數(shù)位為 1,否則結(jié)果為 0。這三個運算符 ( &, |, ^) 產(chǎn)生相同的結(jié)果,無論操作數(shù)位的順序如何。
按位與非( &^):當?shù)谝粋€操作數(shù)位為1,第二個操作數(shù)位為0時結(jié)果為1;否則結(jié)果為 0。請注意,操作數(shù)位的順序會影響結(jié)果。要使結(jié)果為 1,第一個操作數(shù)位必須為 1,第二個必須為 0。
這里的代碼也在 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
最后,&^=是一個速記賦值運算符。例如,x = x &^ y可以替換為x &^= y
- 2 回答
- 0 關(guān)注
- 420 瀏覽
添加回答
舉報