Go基础 专题
专题目录
您的位置:go > Go基础 专题 > Go语言运算符
Go语言运算符
作者:--    发布时间:2019-11-20

运算符是一个符号,通知编译器执行特定的数学或逻辑操作。 go语言有丰富的内置运算符,并提供以下类型的运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 按位运算符
  • 赋值运算符
  • 其它(杂项)运算符

本教程将逐个解释和演示上面所说的算术,关系,逻辑,按位,赋值和其他运算符。

算术运算符

下表显示了go语言支持的所有算术运算符。假设变量 a 的值为 10,变量 b 的值为 20,则:

算术运算符示例

运算符 描述 示例
+ 添加两个操作数 a + b = 30
- 从第一个操作数中减去第二个操作数 a - b = 10
* 将两个操作数相乘 a * b = 200
/ 将分子除以分母 b / a = 2
% 模数运算符,以及整数除法的余数 b % a = 0
++ 增加(递增)运算符,将整数值加一 a++ = 11
-- 相减(递减)运算符,将整数值减一 a— = 9

关系运算符

下表显示了go语言支持的所有关系运算符。假设变量 a 的值为 10,变量 b 的值为 20,则:

关系运算符示例

运算符 描述 示例
== 检查两个操作数的值是否相等,如果相等,则条件为真。 (a == b)结果为假
!= 检查两个操作数的值是否相等,如果值不相等,则条件为真。 (a != b)结果为真
> 检查左操作数的值是否大于右操作数的值,如果是,则条件为真。 (a > b)结果为假
< 检查左操作数的值是否小于右操作数的值,如果是,则条件为真。 (a < b)结果为真
>= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真。 (a >= b)结果为假
<= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真。 (a <= b)结果为真

逻辑运算符

下表显示了go语言支持的所有逻辑运算符。假设变量a的值为1,变量b的值为0,则:

逻辑运算符示例

运算符 描述 示例
&& 逻辑and运算符。如果两个操作数都不为零,则条件为真。 (a && b)结果为真
逻辑or运算符。如果两个操作数中的任何一个非零,则条件变为真。 (a b) 结果为真
! 逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假。 !(a && b) 结果为真

按位运算符

按位操作符对位进行操作,并执行逐位操作。 |^的真值表如下:

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

~a  = 1100 0011

go语言支持的位运算符,如在下表中所列。 假设变量a=60,并且变量b=13,则:

按位运算符示例

运算符 描述 示例
& 如果两个操作数中都存在二进制and运算符,则将其复制到结果。 (a & b) 结果为 12, 也就是 0000 1100
二进制or运算符复制一个位,如果它存在于任一操作数。 (a b) 结果为 61, 也就是 0011 1101
^ 二进制xor运算符复制位,如果它在一个操作数中设置,但不是在两个操作数中设置。 (a ^ b) 结果为 49, 也就是 0011 0001
<< 二进制左移位运算符。左操作数值向左移动由右操作数指定的位数。 a << 2 结果为 240, 也就是 1111 0000
>> 二进制右移运算符。左操作数值向右移动由右操作数指定位数。 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
= 按位包含or和赋值运算符 c = 2 相当于 c = c 2

其它运算符

还有一些其他重要的运算符包括sizeof? :,在go语言中也是支持的。

go语言其它运算符示例

运算符 描述 示例
& 返回变量的地址 &a将给出变量a的实际地址。
* 指向变量的指针 *a 是指向变量a的指针。

go语言中的运算符优先级

运算符优先级确定表达式中的分组。这会影响表达式的计算方式。某些运算符比其他运算符具有更高的优先级; 例如,乘法运算符比加法运算符有更高的优先级。

例如:x = 7 + 3 * 2; 这里,计算结果x被分配13,而不是20,因为运算符 *具有比+有更的优先级,所以它首先乘以3 * 2,然后加上7

这里,具有最高优先级的运算符放在表的顶部,具有最低优先级的运算符出现在底部。 在表达式中,将首先计算较高优先级运算符。

运算符优先级示例

分类 描述 关联性
后缀 () [] -> . ++ - - 左到右
一元 + - ! ~ ++ - - (type)* & sizeof 右到左
乘法 * / % 左到右
加法 + - 左到右
移位 << >> 左到右
关系 < <= > >= 左到右
相等 == != 左到右
按位and & 左到右
按位xor ^ 左到右
按位or 左到右
逻辑and && 左到右
逻辑or 左到右
条件 ?: 右到左
分配 = += -= *= /= %=>>= <<= &= ^= = 右到左
逗号 , 左到右

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册