Go语言运算符和运算符的优先级与C++一致,如果你熟悉C++或者Java的运算符,就不需要查阅这篇博客。Go和Java在运算符上的区别和C++和Java的区别一样。Go和C++都支持指针,因此有取地址运算符&
和取内容运算符*
,你也可以理解*
指示一个指针变量。除此之外,Go不支持C++以及Java所支持的唯一的三目运算符条件?语句1:语句2
。
Go语言内置的运算符包括:
- 算术运算符
- 关系运算符
- 位运算符
- 赋值运算符
- 其他运算符(与指针相关的
&
和*
)
以上全部等同于C++
算术运算符
运算符 | 描述 |
---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 整除 |
% | 取余 |
++ | 自增 |
-- | 自减 |
逻辑运算符(与、或、非)
位运算符
运算符 | 描述 |
---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
<< | 左移 |
>> | 右移 |
同C++,Go也不支持Java的循环左移<<<
和循环右移>>>
。因为它的整型有有符号和无符号之分。<<<
也称为无符号左移,>>>
也称为无符号右移。
赋值运算符
运算符 | 描述 |
---|
= | 赋值 |
+= | i += j 是i = i + j 的简写 |
-= | i -= j 是i = i - j 的简写 |
*= | i *= j 是i = i * j 的简写 |
/= | i /= j 是i = i / j 的简写 |
%= | i %= j 是i = i % j 的简写 |
<<= | i <<= j 是i = i << j 的简写 |
>>= | i >>= j 是i = i >> j 的简写 |
&= | i &= j 是i = i & j 的简写 |
^= | i ^= j 是i = i ^ j 的简写 |
|= | i |= j 是i = i | j 的简写 |
变量初始化时也支持:=
运算符,这点区别于C++。
指针运算符
运算符 | 描述 |
---|
& | 取地址运算符,它得到一个变量的地址(指针) |
* | 取内容运算符,它根据指针(地址)得到变量的值,因此*后面跟的是指针变量 |
运算符优先级
常用二元运算符优先级
优先级 | 运算符 |
---|
5 | * / % << >> & |
4 | + - | ^ |
3 | == != < <= > >= |
2 | && |
1 | || |
全部运算符优先级
优先级 | 分类 | 运算符 | 结合性 |
---|
1 | 逗号运算符 | , | 从左到右 |
2 | 赋值运算符 | = 、+= 、-= 、*= 、/= 、 %= 、 >= 、 <<= 、&= 、^= 、|= | 从右到左 |
3 | 逻辑或 | || | 从左到右 |
4 | 逻辑与 | && | 从左到右 |
5 | 按位或 | | | 从左到右 |
6 | 按位异或 | ^ | 从左到右 |
7 | 按位与 | & | 从左到右 |
8 | 相等/不等 | == 、!= | 从左到右 |
9 | 关系运算符 | < 、<= 、> 、>= | 从左到右 |
10 | 位移运算符 | << 、>> | 从左到右 |
11 | 加法/减法 | + 、- | 从左到右 |
12 | 乘法/除法/取余 | * (乘号)、/ 、% | 从左到右 |
13 | 单目运算符 | ! 、* (指针)、& 、++ 、-- 、+ (正号)、- (负号) | 从右到左 |
14 | 后缀运算符 | ( ) 、[ ] 、-> | 从左到右 |