当前译本仍不稳定,如翻译有问题请及时联系 jacob953@csu.edu.cn。
运算符优先级
Go的运算符优先级与其他语言不同:
优先级 运算符
5 *, /, %, <<, >>, &, &^
4 +, -, |, ^
3 ==, !=, <, <=, >, >=
2 &&
1 ||
与 C 语言进行比较:
Precedence Operator
10 *, /, %
9 +, -
8 <<, >>
7 <, <=, >, >=
6 ==, !=
5 &
4 ^
3 |
2 &&
1 ||
对于同一表达式,可能会产生不同结果:
In Go: 1 << 1 + 1 // (1<<1)+1 = 3
In C: 1 << 1 + 1 // 1<<(1+1) = 4
自增与自减
Go 与许多其他语言不同,没有前缀自增或自减运算符:
var i int
++i // 语法错误: 不期望 ++, 期望 }
--i // 语法错误: 不期望 --, 期望 }
虽然 Go 有这些运算符的后缀版本,但不允许在表达式中使用:
slice := []int{1,2,3}
i := 1
slice[i++] = 0 // 语法错误: 不期望 ++, 期望:
三目运算符
Go 不支持三目运算符:
result := a ? b : c
在 Go 中这是不存在的,放弃吧。你必须使用 if-else 来代替三目运算符。 Go 语言的设计者认为这个运算符往往会导致难看的代码,最好不要有它。
按位非
在 Go 中,XOR 运算符 ^ 被用作一元 NOT 运算符,而不是像许多其他语言使用 ~ 符号。
In Go: ^1 // -2
In C: ~1 // -2
二元 XOR 运算符仍被用作 XOR 运算符(异或)使用。
3^1 // 2