全部运算符、分隔符,以及其他符号。 | + | & | += | &= | && | == | != | ( | ) | | --- | --- | --- | --- | --- | --- | --- | --- | --- | |- |\| | -= | \|= | \|\| | <| <= | [ | ] |* | ^ | *= | ^= | <- | > | >= | { | }| |/ | << | /= | <<= | ++ | = | := | , | ;| |% | >> | %= | >>= | -- | ! | ... | . | :| ||&^ || &^=||||| 运算符结合律全部从左到右。 | 优先级 | 运算符 | 说明 | | --- | --- | --- | | high | * / & << >> & &^ | | | | + - \| ^ | | | | == != < <= < >= | | | | <- | channel && | | low | \|\| | | 简单位运算演 。 ~~~ 0110 & 1011 = 0010 AND 都为 1。 0110 | 1011 = 1111 OR 少 个为 1。 0110 ^ 1011 = 1101 XOR 只能 个为 1。 0110 &^ 1011 = 0100 AND NOT 清除标志位。 ~~~ 标志位操作。 ~~~ a := 0 a |= 1 << 2 // 0000100: 在 bit2 设置标志位。 a |= 1 << 6 // 1000100: 在 bit6 设置标志位 a = a &^ (1 << 6) // 0000100: 清除 bit6 标志位。 ~~~ 不支持运算符重载。尤其需要注意,"++"、"--" 是语句而非表达式。 ~~~ n := 0 p := &n // b := n++ // syntax error // if n++ == 1 {} // syntax error // ++n // syntax error n++ *p++ // (*p)++ ~~~ 没有 "~",取反运算也 "^"。 ~~~ x := 1 x, ^x // 0001, -0010 ~~~