Go 語(yǔ)言中的運(yùn)算符
本文主要介紹 Go語(yǔ)言中的各種運(yùn)算符的使用以及其優(yōu)先級(jí)的比較。Go 語(yǔ)言中運(yùn)算符分為下面幾大類:
- 算數(shù)運(yùn)算符;
- 關(guān)系運(yùn)算符;
- 邏輯運(yùn)算符;
- 位運(yùn)算符;
- 復(fù)制運(yùn)算符。
下面我們就來(lái)一一看下這幾種運(yùn)算符如何使用。
1. Go 語(yǔ)言的算數(shù)運(yùn)算符
Go語(yǔ)言中的算數(shù)運(yùn)算符如表所示:
運(yùn)算符 | 結(jié)合性 | 描述 |
---|---|---|
+ | 從左到右 | 運(yùn)算符左邊的實(shí)體加上右邊的實(shí)體 |
- | 從左到右 | 運(yùn)算符左邊的實(shí)體減去右邊的實(shí)體 |
* | 從左到右 | 運(yùn)算符左邊的實(shí)體乘以右邊的實(shí)體 |
/ | 從左到右 | 運(yùn)算符左邊的實(shí)體除以右邊的實(shí)體 |
% | 從左到右 | 運(yùn)算符左邊的實(shí)體對(duì)右邊的實(shí)體取余 |
++ | 從右到左 | 左邊的變量使用后自加一 |
– | 從右到左 | 左邊的變量使用后自減一 |
代碼示例:
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)
//++和--只能獨(dú)立為一條語(yǔ)句使用
a++
fmt.Println("a++:", a)
b--
fmt.Println("b--:", b)
}
執(zhí)行結(jié)果:
2. Go 語(yǔ)言的關(guān)系運(yùn)算符
Go語(yǔ)言中的關(guān)系運(yùn)算符如表所示:
運(yùn)算符 | 結(jié)合性 | 描述 |
---|---|---|
== | 從左到右 | 左右兩邊實(shí)體相等運(yùn)算結(jié)果為true,否則為false |
!= | 從左到右 | 左右兩邊實(shí)體不等運(yùn)算結(jié)果為true,否則為false |
>= | 從左到右 | 左邊的實(shí)體大于或等于右邊運(yùn)算結(jié)果為true,否則為false |
> | 從左到右 | 左邊的實(shí)體大于右邊運(yùn)算結(jié)果為true,否則為false |
<= | 從左到右 | 左邊的實(shí)體小于或等于右邊運(yùn)算結(jié)果為true,否則為false |
< | 從左到右 | 左邊的實(shí)體小于右邊運(yùn)算結(jié)果為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)
}
執(zhí)行結(jié)果:
3. Go 語(yǔ)言的邏輯運(yùn)算符
Go語(yǔ)言中的邏輯運(yùn)算符如表所示:
運(yùn)算符 | 結(jié)合性 | 描述 |
---|---|---|
&& | 從左到右 | 左右實(shí)體均為 true 運(yùn)算結(jié)果為 true ,否則為 false |
|| | 從左到右 | 左右實(shí)體均為 false 運(yùn)算結(jié)果為 false ,否則為 true |
! | 從右到左 | 右邊實(shí)體為 false 運(yùn)算結(jié)果為 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)
}
運(yùn)算結(jié)果:
4. Go 語(yǔ)言的位運(yùn)算符
Go 語(yǔ)言的位運(yùn)算符如表所示:
運(yùn)算符 | 結(jié)合性 | 描述 |
---|---|---|
& | 從左到右 | 按位與 |
| | 從左到右 | 按位或 |
^ | 從左到右 | 按位異或 |
<< | 從左到右 | 左位移 |
>> | 從左到右 | 右位移 |
代碼示例:
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
}
執(zhí)行結(jié)果:
5.Go 語(yǔ)言的賦值運(yùn)算符
Go語(yǔ)言賦值運(yùn)算符如下表所示:
運(yùn)算符 | 結(jié)合性 | 描述 |
---|---|---|
= | 從右到左 | 將左邊的實(shí)體賦值給右邊的變量 |
+= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行加運(yùn)算之后賦值給右邊的變量 |
-= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行減****運(yùn)算之后賦值給右邊的變量 |
*= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行乘運(yùn)算之后賦值給右邊的變量 |
/= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行除運(yùn)算之后賦值給右邊的變量 |
%= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行取余運(yùn)算之后賦值給右邊的變量 |
>>= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行右位移運(yùn)算之后賦值給右邊的變量 |
<<= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行左位移運(yùn)算之后賦值給右邊的變量 |
&= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行與運(yùn)算之后賦值給右邊的變量 |
|= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行或運(yùn)算之后賦值給右邊的變量 |
^= | 從右到左 | 將右邊的變量與左邊的實(shí)體進(jìn)行異或運(yùn)算之后賦值給右邊的變量 |
代碼示例:
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)
}
執(zhí)行結(jié)果:
6. 優(yōu)先級(jí)
下表為各運(yùn)算符的優(yōu)先級(jí)示圖,優(yōu)先級(jí)從高到低:
優(yōu)先級(jí) | 類別 | 運(yùn)算符 |
---|---|---|
1 | 括號(hào)運(yùn)算符 | () |
2 | 單目運(yùn)算符 | !、++、– |
3 | 算數(shù)運(yùn)算符 | *、/、% |
4 | +、- | |
5 | 位移運(yùn)算符 | >>、<< |
6 | 關(guān)系運(yùn)算符 | <、<=、>、>= |
7 | ==、!= | |
8 | 按位與 | & |
9 | 按位異或 | ^ |
10 | 按位或 | | |
11 | 邏輯與 | && |
12 | 邏輯或 | || |
13 | 賦值運(yùn)算符 | =、+=、-=、*=、/=、 %=、 >=、 <<=、&=、^=、|= |
代碼示例:
package main
import (
"fmt"
)
func main() {
var a = 28
var b = 99
fmt.Println(" a + b * 2 =", a+b*2) //乘法優(yōu)先級(jí)較高,先執(zhí)行乘法
fmt.Println("(a + b) * 2 =", (a+b)*2) //括號(hào)優(yōu)先級(jí)最高,先執(zhí)行括號(hào)中的運(yùn)算
}
執(zhí)行結(jié)果:
7. 小結(jié)
Go 語(yǔ)言的運(yùn)算符一般分為算數(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符以及賦值運(yùn)算符四大類。在使用過(guò)程中如果記不清楚運(yùn)算符的優(yōu)先級(jí),可以使用特殊的運(yùn)算符——括號(hào)運(yùn)算符()
,其優(yōu)先級(jí)最高,使用它就可以隨心所欲的控制優(yōu)先級(jí)了。