运算符
Go 语言内置的运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
算术运算符
下表列出了所有 Go 语言的 算术运算符,假定 A 的值为 10,B 的值为 20
| 运算符 | 描述 | 实例 |
|---|
- | 相加 | A + B 结果 30
- | 相减 | A - B 结果 -10
- | 相乘 | A * B 结果 200 / | 相除 | A / B 结果 0.5 % | 取余 | A % B 结果 10 ++ | 自增 | A++ 结果 11 -- | 自减 | A-- 结果 9
关系运算符
下表列出了所有 Go 语言的 关系运算符,假定 A 的值为 10,B 的值为 20
| 运算符 | 描述 | 实例 |
|---|---|---|
| == | 检查两个数是否相等,如果相等返回 true,否则返回 false | ( A == B ) 为 false |
| != | 检查两个数是否不相等,如果不相等返回 true,否则返回 false | ( A != B ) 为 true |
| > | 检查左边值是否大于右边值,如果是返回 true,否则返回 false | ( A > B ) 为 false |
| < | 检查左边值是否小于右边值,如果是返回 true,否则返回 false | ( A < B ) 为 true |
| >= | 检查左边值是否大于等于右边值,如果是返回 true,否则返回 false | ( A >= B ) 为 false |
| <= | 检查左边值是否小于等于右边值,如果是返回 true,否则返回 false | ( A <= B ) 为 true |
逻辑运算符
下表列出了所有 Go 语言的 逻辑运算符,假定 A 的值为 true,B 的值为 false
| 运算符 | 描述 | 实例 |
|---|---|---|
| && | AND | 逻辑与运算符,如果左右两边值都为 true,返回 true,否则返回 false (ps:遇到第一个为 false 的值,则停止运算,返回 false) | ( A && B ) 为 false |
| || | OR | 逻辑或运算符,如果左右两边值有一个 true,返回 true,否则返回 false (ps:遇到第一个为 true 的值,则停止运算,返回 true) | ( A || B ) 为 true |
| ! | 逻辑非运算符,如果右边值为 false,返回 true,否则返回 false | ! ( A > B ) 为 true |
位运算符
位运算符对整数在内存中的二进制位进行操作
下表列出了位运算符 &, |, ^ 的计算
| P | Q | P & Q | P | Q | P ^ Q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
下表列出了所有 Go 语言的 位运算符,假定 A 的值为 60,B 的值为 13
A :60 :0011 1100 B :13 :0000 1101
| 运算符 | 描述 | 实例 | ||
|---|---|---|---|---|
| & | 按位与运算符 & 是双目运算符,其功能是参与运算的两数各对应的二进制位相与 | ( A & B ) 为 12,二进制为 0000 1100 | ||
| | | 按位或运算 | 是双目运算符,其功能是参与运算的两数各对应的二进制位相或 | ( A | B ) 为 61,二进制为 0011 1101 |
| 按位异或运算符 ^ 是双目运算符,其功能是参与运算的两数各对应的二进制位相异或;对应的二进制位相异时,结果为 1,反之为 0 | ( A ^ B ) 为 49,二进制为 0011 0001 | |||
| << | 左移运算符 << 是双目运算符,左移 n 位就是乘以 2 的 n 次方,其功能是把 << 运算符 左边数 的各二进制位全部左移若干位,由 << 运算符 右边数 指定移动的位数,高位丢弃,地位补 0 | A << 2 为 240,二进制为 1111 0000 | ||
| >> | 右移运算符 >> 是双目运算符,右移 n 位就是除以 2 的 n 次方,其功能是把 >> 运算符 左边数 的各二进制位全部右移若干位,由 >> 运算符 右边数 指定移动的位数 | A >> 2 为 15,二进制为 0000 1111 |
赋值运算符
下表列出了所有 Go 语言的 赋值运算符
| 运算符 | 描述 | 实例 |
|---|---|---|
| = | 简单的赋值运算符,将一个表达式的值赋给左值 | C = A + B |
| += | 相加后再赋值 | C += A 等于 (C = C + A) |
| -= | 相减后再赋值 | C -= A 等于 (C = C - A) |
| *= | 相乘后再赋值 | C *= A 等于 (C = C * A) |
| /= | 相除后再赋值 | C /= A 等于 (C = C / A) |
| %= | 求余后再赋值 | C %= A 等于 (C = C % A) |
| <<= | 左移后再赋值 | C <<= 2 等于 (C = C << 2) |
| >>= | 右移后再赋值 | C >>= 2 等于 (C = C >> 2) |
| &= | 按位与后再赋值 | C &= 2 等于 (C = C & 2) |
| ^= | 按位异或后再赋值 | C ^= 2 等于 (C = C ^ 2) |
| |= | 按位或后再赋值 | C |= 2 等于 (C = C | 2) |
其他运算符
下表列出了 Go 语言的 其他运算符
| 运算符 | 描述 | 实例 |
|---|---|---|
| & | 返回变量存储地址 | &a;返回变量的实际地址 |
- | 指针变量 | *a;是一个指针变量 或者 var a = new(int);*a; 返回一个指针变量地址存储的值
运算符优先级
| 优先级 | 运算符 |
|---|---|
| 5 | * 、 / 、 % 、 << 、 >> 、 & |
| 4 | + 、 - 、 | 、 ^ |
| 3 | == 、 != 、 < 、 <= 、 > 、 >= |
| 2 | && |
| 1 | || |