Go 語言中的運算符
本文主要介紹 Go語言中的各種運算符的使用以及其優先級的比較。Go 語言中運算符分為下面幾大類:
- 算數運算符;
- 關系運算符;
- 邏輯運算符;
- 位運算符;
- 復制運算符。
下面我們就來一一看下這幾種運算符如何使用。
1. Go 語言的算數運算符
Go語言中的算數運算符如表所示:
| 運算符 | 結合性 | 描述 |
|---|---|---|
| + | 從左到右 | 運算符左邊的實體加上右邊的實體 |
| - | 從左到右 | 運算符左邊的實體減去右邊的實體 |
| * | 從左到右 | 運算符左邊的實體乘以右邊的實體 |
| / | 從左到右 | 運算符左邊的實體除以右邊的實體 |
| % | 從左到右 | 運算符左邊的實體對右邊的實體取余 |
| ++ | 從右到左 | 左邊的變量使用后自加一 |
| – | 從右到左 | 左邊的變量使用后自減一 |
代碼示例:
代碼塊
- 1?
package main - 2
- 3?
import ( - 4? ? ? ? ?
"fmt" - 5?
) - 6
- 7?
func main() { - 8? ? ? ? ?
var a = -7 - 9? ? ? ? ?
var b = 4 - 10
- 11? ? ? ?
fmt.Println("a + b =", a+b) - 12? ? ? ?
fmt.Println("a - b =", a-b) - 13? ? ? ?
fmt.Println("a * b =", a*b) - 14? ? ? ?
fmt.Println("a / b =", a/b) - 15? ? ? ?
fmt.Println("a % b =", a%b) - 16
- 17? ? ? ?
//++和--只能獨立為一條語句使用 - 18? ? ? ?
a++ - 19? ? ? ?
fmt.Println("a++:", a) - 20? ? ? ?
b-- - 21? ? ? ?
fmt.Println("b--:", b) - 22?
}
執行結果:

2. Go 語言的關系運算符
Go語言中的關系運算符如表所示:
| 運算符 | 結合性 | 描述 |
|---|---|---|
| == | 從左到右 | 左右兩邊實體相等運算結果為true,否則為false |
| != | 從左到右 | 左右兩邊實體不等運算結果為true,否則為false |
| >= | 從左到右 | 左邊的實體大于或等于右邊運算結果為true,否則為false |
| > | 從左到右 | 左邊的實體大于右邊運算結果為true,否則為false |
| <= | 從左到右 | 左邊的實體小****于或等于右邊運算結果為true,否則為false |
| < | 從左到右 | 左邊的實體小于右邊運算結果為true,否則為false |
代碼示例:
代碼塊
- 1?
package main - 2
- 3?
import ( - 4? ? ? ? ?
"fmt" - 5?
) - 6
- 7?
func main() { - 8? ? ? ? ?
var a = -7 - 9? ? ? ? ?
var b = 4 - 10
- 11? ? ? ?
fmt.Println("a == b :", a == b) - 12? ? ? ?
fmt.Println("a != b :", a != b) - 13? ? ? ?
fmt.Println("a >= b :", a >= b) - 14? ? ? ?
fmt.Println(" a > b :", a > b) - 15? ? ? ?
fmt.Println("a <= b :", a <= b) - 16? ? ? ?
fmt.Println(" a < b :", a < b) - 17?
}
執行結果:

3. Go 語言的邏輯運算符
Go語言中的邏輯運算符如表所示:
| 運算符 | 結合性 | 描述 |
|---|---|---|
| && | 從左到右 | 左右實體均為?true?運算結果為?true?,否則為?false |
| || | 從左到右 | 左右實體均為?false?運算結果為?false?,否則為?true |
| ! | 從右到左 | 右邊實體為?false?運算結果為?true?,否則為?false |
代碼示例:
代碼塊
- 1?
package main - 2
- 3?
import ( - 4? ? ? ? ?
"fmt" - 5?
) - 6
- 7?
func main() { - 8? ? ? ? ?
var a = true - 9? ? ? ? ?
var b = false - 10
- 11? ? ? ?
fmt.Println("a && b :", a && b) - 12? ? ? ?
fmt.Println("a || b :", a || b) - 13? ? ? ?
fmt.Println(" !a :", !a) - 14?
}
運算結果:

4. Go 語言的位運算符
Go 語言的位運算符如表所示:
| 運算符 | 結合性 | 描述 |
|---|---|---|
| & | 從左到右 | 按位與 |
| | | 從左到右 | 按位或 |
| ^ | 從左到右 | 按位異或 |
| << | 從左到右 | 左位移 |
| >> | 從左到右 | 右位移 |
代碼示例:
代碼塊
- 1?
package main - 2
- 3?
import ( - 4? ? ? ? ?
"fmt" - 5?
) - 6
- 7?
func main() { - 8? ? ? ? ?
var a = 28 //0001 1100 - 9? ? ? ? ?
var b = 99 //0110 0011 - 10
- 11? ? ? ?
fmt.Println(" a & b :", a&b) //0 : 0000 0000 - 12? ? ? ?
fmt.Println(" a | b :", a|b) //127 : 0111 1111 - 13? ? ? ?
fmt.Println(" a ^ b :", a^b) //127 : 0111 1111 - 14? ? ? ?
fmt.Println("a >> 2 :", a>>2) //7 : 0000 0111 - 15? ? ? ?
fmt.Println("b << 1 :", b<<1) //198 : 1100 0110 - 16?
}
執行結果:

5.Go 語言的賦值運算符
Go語言賦值運算符如下表所示:
| 運算符 | 結合性 | 描述 |
|---|---|---|
| = | 從右到左 | 將左邊的實體賦值給右邊的變量 |
| += | 從右到左 | 將右邊的變量與左邊的實體進行加運算之后賦值給右邊的變量 |
| -= | 從右到左 | 將右邊的變量與左邊的實體進行減****運算之后賦值給右邊的變量 |
| *= | 從右到左 | 將右邊的變量與左邊的實體進行乘運算之后賦值給右邊的變量 |
| /= | 從右到左 | 將右邊的變量與左邊的實體進行除運算之后賦值給右邊的變量 |
| %= | 從右到左 | 將右邊的變量與左邊的實體進行取余運算之后賦值給右邊的變量 |
| >>= | 從右到左 | 將右邊的變量與左邊的實體進行右位移運算之后賦值給右邊的變量 |
| <<= | 從右到左 | 將右邊的變量與左邊的實體進行左位移運算之后賦值給右邊的變量 |
| &= | 從右到左 | 將右邊的變量與左邊的實體進行與運算之后賦值給右邊的變量 |
| |= | 從右到左 | 將右邊的變量與左邊的實體進行或運算之后賦值給右邊的變量 |
| ^= | 從右到左 | 將右邊的變量與左邊的實體進行異或運算之后賦值給右邊的變量 |
代碼示例:
代碼塊
- 1?
package main - 2
- 3?
import ( - 4? ? ? ? ?
"fmt" - 5?
) - 6
- 7?
func main() { - 8? ? ? ? ?
var a = 28 - 9? ? ? ? ?
var b = 99 - 10? ? ? ?
a = b - 11? ? ? ?
fmt.Println(" a = b :", a) - 12? ? ? ?
a = 28 - 13? ? ? ?
a += b - 14? ? ? ?
fmt.Println(" a += b :", a) - 15? ? ? ?
a = 28 - 16? ? ? ?
a -= b - 17? ? ? ?
fmt.Println(" a -= b :", a) - 18? ? ? ?
a = 28 - 19? ? ? ?
a *= b - 20? ? ? ?
fmt.Println(" a *= b :", a) - 21? ? ? ?
a = 28 - 22? ? ? ?
a /= 2 - 23? ? ? ?
fmt.Println(" a /= 2 :", a) - 24? ? ? ?
a = 28 - 25? ? ? ?
b %= 1 - 26? ? ? ?
fmt.Println(" b %= 1 :", a) - 27? ? ? ?
a = 28 - 28? ? ? ?
a &= b - 29? ? ? ?
fmt.Println(" a &= b :", a) - 30? ? ? ?
a = 28 - 31? ? ? ?
a |= b - 32? ? ? ?
fmt.Println(" a |= b :", a) - 33? ? ? ?
a = 28 - 34? ? ? ?
a ^= b - 35? ? ? ?
fmt.Println(" a ^= b :", a) - 36? ? ? ?
a = 28 - 37? ? ? ?
a >>= 2 - 38? ? ? ?
fmt.Println("a >>= 2 :", a) - 39? ? ? ?
a = 28 - 40? ? ? ?
b <<= 1 - 41? ? ? ?
fmt.Println("b <<= 1 :", a) - 42?
}
執行結果:

6. 優先級
下表為各運算符的優先級示圖,優先級從高到低:
| 優先級 | 類別 | 運算符 |
|---|---|---|
| 1 | 括號運算符 | () |
| 2 | 單目運算符 | !、++、– |
| 3 | 算數運算符 | *、/、% |
| 4 | +、- | |
| 5 | 位移運算符 | >>、<< |
| 6 | 關系運算符 | <、<=、>、>= |
| 7 | ==、!= | |
| 8 | 按位與 | & |
| 9 | 按位異或 | ^ |
| 10 | 按位或 | | |
| 11 | 邏輯與 | && |
| 12 | 邏輯或 | || |
| 13 | 賦值運算符 | =、+=、-=、*=、/=、 %=、 >=、 <<=、&=、^=、|= |
代碼示例:
代碼塊
- 1?
package main - 2
- 3?
import ( - 4? ? ? ?
"fmt" - 5?
) - 6
- 7?
func main() { - 8? ? ? ? ?
var a = 28 - 9? ? ? ? ?
var b = 99 - 10
- 11? ? ? ??
fmt.Println(" a + b * 2 =", a+b*2) //乘法優先級較高,先執行乘法 - 12? ? ? ??
fmt.Println("(a + b) * 2 =", (a+b)*2) //括號優先級最高,先執行括號中的運算 - 13?
}
執行結果:

7. 小結
Go 語言的運算符一般分為算數運算符、關系運算符、邏輯運算符、位運算符以及賦值運算符四大類。在使用過程中如果記不清楚運算符的優先級,可以使用特殊的運算符——括號運算符(),其優先級最高,使用它就可以隨心所欲的控制優先級了。
文章來源于網絡,侵刪!
