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运算符。如果两个操作数都不为零,则条件为真。(A && B)结果为真
逻辑OR运算符。如果两个操作数中的任何一个非零,则条件变为真。(A B) 结果为真
!逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假。!(A && B) 结果为真

按位运算符

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

pqp & 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

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左到右
条件?:右到左
分配= += -= *= /= %=>>= <<= &= ^= =右到左
逗号,左到右

匿名

发表评论

匿名网友