跳到主要内容

Go 语言中的运算符

本文主要介绍 Go语言中的各种运算符的使用以及其优先级的比较。Go 语言中运算符分为下面几大类:

  • 算数运算符;
  • 关系运算符;
  • 逻辑运算符;
  • 位运算符;
  • 复制运算符。

下面我们就来一一看下这几种运算符如何使用。

1. Go 语言的算数运算符

Go语言中的算数运算符如表所示:

运算符结合性描述
+从左到右运算符左边的实体加上右边的实体
-从左到右运算符左边的实体减去右边的实体
*从左到右运算符左边的实体乘以右边的实体
/从左到右运算符左边的实体除以右边的实体
%从左到右运算符左边的实体对右边的实体取余
++从右到左左边的变量使用后自加一
从右到左左边的变量使用后自减一

代码示例:

package main

import (
"fmt"
)

func main() {
var a = -7
var b = 4

fmt.Println("a + b =", a+b)
fmt.Println("a - b =", a-b)
fmt.Println("a \* b =", a\*b)
fmt.Println("a / b =", a/b)
fmt.Println("a % b =", a%b)

//++和--只能独立为一条语句使用
a++
fmt.Println("a++:", a)
b--
fmt.Println("b--:", b)
}

执行结果:

图片描述

2. Go 语言的关系运算符

Go语言中的关系运算符如表所示:

运算符结合性描述
==从左到右左右两边实体相等运算结果为true,否则为false
!=从左到右左右两边实体不等运算结果为true,否则为false
>=从左到右左边的实体大于或等于右边运算结果为true,否则为false
>从左到右左边的实体大于右边运算结果为true,否则为false
<=从左到右左边的实体小于或等于右边运算结果为true,否则为false
<从左到右左边的实体小于右边运算结果为true,否则为false

代码示例:

package main

import (
"fmt"
)

func main() {
var a = -7
var b = 4

fmt.Println("a == b :", a == b)
fmt.Println("a != b :", a != b)
fmt.Println("a >= b :", a >= b)
fmt.Println(" a > b :", a > b)
fmt.Println("a <= b :", a <= b)
fmt.Println(" a < b :", a < b)
}

执行结果:

图片描述

3. Go 语言的逻辑运算符

Go语言中的逻辑运算符如表所示:

运算符结合性描述
&&从左到右左右实体均为 true 运算结果为 true ,否则为 false
从右到左右边实体为 false 运算结果为 true ,否则为 false

代码示例:

package main

import (
"fmt"
)

func main() {
var a = true
var b = false

fmt.Println("a && b :", a && b)
fmt.Println("a || b :", a || b)
fmt.Println(" !a :", !a)
}

运算结果:

图片描述

4. Go 语言的位运算符

Go 语言的位运算符如表所示:

运算符结合性描述
&从左到右按位与
从左到右
^从左到右按位异或
<<从左到右左位移
>>从左到右右位移

代码示例:

package main

import (
"fmt"
)

func main() {
var a = 28 //0001 1100
var b = 99 //0110 0011

fmt.Println(" a & b :", a&b) //0 : 0000 0000
fmt.Println(" a | b :", a|b) //127 : 0111 1111
fmt.Println(" a ^ b :", a^b) //127 : 0111 1111
fmt.Println("a >> 2 :", a>>2) //7 : 0000 0111
fmt.Println("b << 1 :", b<<1) //198 : 1100 0110
}

执行结果:

图片描述

5.Go 语言的赋值运算符

Go语言赋值运算符如下表所示:

运算符结合性描述
=从右到左将左边的实体赋值给右边的变量
+=从右到左将右边的变量与左边的实体进行加运算之后赋值给右边的变量
-=从右到左将右边的变量与左边的实体进行****运算之后赋值给右边的变量
*=从右到左将右边的变量与左边的实体进行乘运算之后赋值给右边的变量
/=从右到左将右边的变量与左边的实体进行除运算之后赋值给右边的变量
%=从右到左将右边的变量与左边的实体进行取余运算之后赋值给右边的变量
>>=从右到左将右边的变量与左边的实体进行右位移运算之后赋值给右边的变量
<<=从右到左将右边的变量与左边的实体进行左位移运算之后赋值给右边的变量
&=从右到左将右边的变量与左边的实体进行与运算之后赋值给右边的变量
=从右到左
^=从右到左将右边的变量与左边的实体进行异或运算之后赋值给右边的变量

代码示例:

package main

import (
"fmt"
)

func main() {
var a = 28
var b = 99
a = b
fmt.Println(" a = b :", a)
a = 28
a += b
fmt.Println(" a += b :", a)
a = 28
a -= b
fmt.Println(" a -= b :", a)
a = 28
a \*= b
fmt.Println(" a \*= b :", a)
a = 28
a /= 2
fmt.Println(" a /= 2 :", a)
a = 28
b %= 1
fmt.Println(" b %= 1 :", a)
a = 28
a &= b
fmt.Println(" a &= b :", a)
a = 28
a |= b
fmt.Println(" a |= b :", a)
a = 28
a ^= b
fmt.Println(" a ^= b :", a)
a = 28
a >>= 2
fmt.Println("a >>= 2 :", a)
a = 28
b <<= 1
fmt.Println("b <<= 1 :", a)
}

执行结果:

图片描述

6. 优先级

下表为各运算符的优先级示图,优先级从高到低

优先级类别运算符
1括号运算符()
2单目运算符!、++、–
3算数运算符*、/、%
4+、-
5位移运算符>>、<<
6关系运算符<、<=、>、>=
7==、!=
8按位与&
9按位异或^
10按位或
11逻辑与&&
12逻辑或
13赋值运算符=、+=、-=、*=、/=、 %=、 >=、 <<=、&=、^=、

代码示例:


package main

import (
"fmt"
)

func main() {
var a = 28
var b = 99
fmt.Println(" a + b \* 2 =", a+b\*2) //乘法优先级较高,先执行乘法
fmt.Println("(a + b) \* 2 =", (a+b)\*2) //括号优先级最高,先执行括号中的运算
}

执行结果:

图片描述

7. 小结

Go 语言的运算符一般分为算数运算符关系运算符逻辑运算符位运算符以及赋值运算符四大类。在使用过程中如果记不清楚运算符的优先级,可以使用特殊的运算符——括号运算符(),其优先级最高,使用它就可以随心所欲的控制优先级了。