优先级 | 分类 | 运算符 | 结合性 |
1 | 逗号运算符 | , | 从左到右 |
2 | 赋值运算符 | =、+=、-=、*=、/=、 %=、 >=、 <<=、&=、^=、|= | 从右到左 |
3 | 逻辑或 | || | 从左到右 |
4 | 逻辑与 | && | 从左到右 |
5 | 按位或 | | | 从左到右 |
6 | 按位异或 | ^ | 从左到右 |
7 | 按位与 | & | 从左到右 |
8 | 相等/不等 | ==、!= | 从左到右 |
9 | 关系运算符 | <、<=、>、>= | 从左到右 |
10 | 位移运算符 | <<、>> | 从左到右 |
11 | 加法/减法 | +、- | 从左到右 |
12 | 乘法/除法/取余 | *(乘号)、/、% | 从左到右 |
13 | 单目运算符 | !、*(指针)、& 、++、--、+(正号)、-(负号) | 从右到左 |
14 | 后缀运算符 | ( )、[ ]、-> | 从左到右 |
算术运算符
+:相加;
-:相减;
*:相乘;
/:相除;
%:求余;
++:自增;
--:自减;
其中,++ 与 -- 不能用于赋值表达式, 如: count2 := count++;并且在 Go 语言中,不存在如:++count 表达式。
关系运算符
==:检查两个值是否相等,如果相等返回 true,否则返回 false;
!=:检查两个值是否不相等,如果不相等返回 true,否则返回 false;
>:检查左边值是否大于右边值,如果是返回 true,否则返回 false;
<:检查左边值是否小于右边值,如果是返回 true,否则返回 false;
>=:检查左边值是否大于等于右边值,如果是返回 true,否则返回 false;
<=:检查左边值是否小于等于右边值,如果是返回 true,否则返回 false;
逻辑运算符
&&:逻辑 AND 运算符。如果两边的操作数都是 true,则条件为 true,否则为 false;
||:逻辑 OR 运算符。如果两边的操作数有一个 true,则条件为 true,否则为 false;
!:逻辑 NOT 运算符。如果条件为 true,则逻辑 NOT 添加为 true,否则为 false;
位运算符
位运算符是对整数在内存中的二进制进行操作。
&:按位与运算符。其功能是参与运算的两个数的二进制按位对齐,当对应位都为 1 时,才返回 1;
fmt.Println(3 & 4) // 0
// 计算过程
// 0011 => 3 的二进制
// 0100 => 4 的二进制
// &
// ---------------------------
// 0000 => 0 的二进制
|:按位或运算符。其功能是参与运算的两个数的二进制按位对齐,当对应位中只要有一位是 1,就返回 1;
fmt.Println(3 | 4) // 7
// 计算过程
// 0011 => 3 的二进制
// 0100 => 4 的二进制
// |
// ---------------------------
// 0111 => 7 的二进制
^:按位异或运算符。其是参与运算的两个数的二进制按位对齐,当对应位有一位是 1,就返回 1;如果对应两位都是 1 或 0,就返回 0;
fmt.Println(25 ^ 3) // 26
// 计算过程
// 0001 1001 => 25 的二进制
// 0000 0011 => 3 的二进制
// ^
// ---------------------------
// 0001 1010 => 26 的二进制
<<:左移运算符。其功能是将数值的二进制所有位向左移动指定的位数;
fmt.Println(3 << 3) // 24
// 计算过程
// 0000 0011 => 3 的二进制
// 3
// <<
// ---------------------------
// 0001 1000 => 24 的二进制
>>:右移运算符。其功能是将数值的二进制所有位向右移动指定的位数;
fmt.Println(3 >> 3) // 0
// 计算过程
// 0000 0011 => 3 的二进制
// 3
// >>
// ---------------------------
// 0000 0000 => 0 的二进制
赋值运算符
=:简单的赋值运算符,将一个表达式的值赋给一个左值;
+=:相加后再赋值;
-=:相减后再赋值;
*=:相乘后再赋值;
/=:相除后再赋值;
%=:取余后再赋值;
&=:按位与后赋值;
|=:按位或后赋值;
^=:按位异或后赋值;
<<=:左位移后赋值;
>>=:右位移后赋值;
请发表评论