41

GoLang 学习笔记 - 运算符

 4 years ago
source link: https://www.tuicool.com/articles/ZRreA3u
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

运算符用于在程序运行时执行数学或逻辑运算。

Go 语言内置的运算符有:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符

算术运算符

下表列出了所有Go语言的算术运算符。假定 A 值为 15,B 值为 5 。

运算符 描述 实例 + 相加 A + B 输出结果 20 - 相减 A - B 输出结果 10 * 相乘 A * B 输出结果 75 / 相除 B / A 输出结果 3 % 求余 B % A 输出结果 0 ++ 自增 A++ 输出结果 16 -- 自减 A-- 输出结果 14

GoLang 中 ++ 和 -- 操作只可以当成一个语句来使用,不可以作为表达式。这样可以避免很多问题。

a ++ //允许
b = a++ //不允许

即便如此,自增和自减仍然是一种很不规范的操作。我建议大家在实际开发中应当避免,使用 a += 1 来取代。

关系运算符

下表列出了所有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 值为 talse。

运算符 描述 实例 && 逻辑与运算符。 如果两边的操作数都是 true,则条件 true,否则为false。 (A && B) 为 false || 逻辑或运算符。 如果两边的操作数有一个 true,则条件 true,否则为 false。 (A || B) 为 true ! 逻辑非运算符。 如果条件为 true,则逻辑非条件 false,否则为 true。 ! (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

假定 A = 60; B = 13; 其二进制数转换为:

A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001

GoLang 支持的位运算符如下表所示。假定 A 为60,B 为13:

运算符 描述 实例 & 按位与, 其功能是参与运算的两数各对应的二进位相与。 (A & B) 结果为 12,二进制为 0000 1100 | 按位或,其功能是参与运算的两数各对应的二进位相或。 (A | B) 结果为 61,二进制为 0011 1101 ^ 按位异或,其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 1。 (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 将 A + B 表达式结果赋值给 C += 相加后再赋值 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 是一个指针变量

运算符优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。

这里,具有最高优先级的运算符放在表的顶部,具有最低优先级的运算符出现在底部。

分类 描述 关联性 后缀 ( ) [ ] -> . ++ -- 左到右 单目 + - ! ~ (type) * & sizeof 右到左 乘法 * / % 左到右 加法 + - 左到右 移位 << >> 左到右 关系 < <= > >= 左到右 相等 == != 左到右 按位与 & 左到右 按位异或 ^ 左到右 按位或 | 左到右 逻辑与 && 左到右 逻辑或 || 左到右 赋值运算符 = += -= *= /= %= >>= <<= &= ^= |= 右到左 逗号 , 左到右

在表达式中,将首先计算较高优先级运算符。当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。

    以上内容均源于网络,并加上自己的实践和理解,如有错误的地方,请在评论区指正。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK