1. 程式人生 > GO語言入門 >18 Go 語言中的運算子

18 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 運算結果為 false ,否則為 true
從右到左 右邊實體為 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 語言的運算子一般分為算數運算子關係運算符邏輯運算子位運算子以及賦值運算子四大類。在使用過程中如果記不清楚運算子的優先順序,可以使用特殊的運算子——括號運算子(),其優先順序最高,使用它就可以隨心所欲的控制優先順序了。