Go 运算符


运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。 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运算符。如果两个操作数都不为零,则条件为true。(A && B)是错误的。
||称为逻辑或运算符。如果两个操作数中的任何一个都不为零,则条件为true。(A || B)为真。
!称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假。!(A && B)是正确的。

下表显示了Go语言支持的所有逻辑运算符。假设变量A为真和变量B为假,则:

运算符描述例子
&&称为逻辑AND运算符。如果两个操作数都为假,则条件变为假。(A && B)是错误的。
||称为逻辑或运算符。如果两个操作数中的任何一个为true,则条件为true。(A || B)为真。
!称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符会将其设置为假。!(A && B)是正确的。

按位运算符


按位运算符对位进行运算并执行逐位运算。 &,|和^的真值表如下:

pqp&qp | qp ^ q
00000
01011
11110
10011

假设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

下表列出了C语言支持的按位运算符。假设变量A等于60,变量B等于13,则:

运算符描述例子
&如果两个操作数中都存在二进制AND运算符,则会将一位复制到结果中。(A&B)将得到12,即0000 1100
|如果任一操作数中存在二进制或运算符,则会对其进行复制。(A | B)将得到61,即0011 1101
^二进制XOR运算符将复制该位(如果在一个操作数中但不是在两个操作数中都将其置1)。(A ^ B)将得到49,即0011 0001
<<二进制左移运算符。左操作数的值向左移动右操作数指定的位数。<< 2将得到240,即1111 0000
>>二进制右移运算符。左操作数的值向右移动右操作数指定的位数。A >> 2将得到15,即0000 1111

赋值运算符


下表列出了Go语言支持的所有赋值运算符:

运算符描述例子
=简单的赋值运算符,将值从右侧操作数分配到左侧操作数C = A + B将A + B的值赋给C
+=添加AND赋值运算符,它将右操作数添加到左操作数,并将结果分配给左操作数C + = A等效于C = C + A
-=减去AND赋值运算符,它从左边的操作数中减去右边的操作数,并将结果赋给左边的操作数C-= A等效于C = C-A
*=将AND赋值运算符相乘,将右操作数与左操作数相乘并将结果分配给左操作数C * = A等效于C = C * A
/=除法AND赋值运算符,它将左操作数除以右操作数,并将结果分配给左操作数C / = A等效于C = C / A
%=模AND赋值运算符,它使用两个操作数取模并将结果赋给左操作数C%= A等效于C = C%A
<< =左移AND赋值运算符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语言还支持其他一些重要的运算符,包括 sizeof 和 ? : 。

运算符描述例子
&返回变量的地址。&一种;提供变量的实际地址。
*指向变量的指针。*一种;提供指向变量的指针。

Go中的运算符优先级


运算符优先级确定表达式中术语的分组。这会影响表达式的求值方式。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符。

例如x = 7 + 3 * 2;在这里,x被赋值为13,而不是20,因为运算符*的优先级比+高,因此它首先与3 * 2相乘,然后加到7。

在此,优先级最高的运算符出现在表格的顶部,而优先级最低的运算符出现在表格的底部。在表达式中,优先级较高的运算符将首先被评估。

类别运算符
关联性
前缀()[]->。 ++--左到右
一元+-! 〜++--(type)*&sizeof右到左
乘除* / %左到右
加减
+ -左到右
移位<< >>左到右
关系型<左到右
相等== !=左到右
按位与&左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或||左到右
赋值= + =-= * = / =%= >> = << =&= ^ = | =右到左
逗号,左到右