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 | 后缀运算符 | ( )、[ ]、-> | 从左到右 |