運(yùn)算符是任何編程語(yǔ)言的基礎(chǔ)。因此,在不使用運(yùn)算符的情況下,Go語(yǔ)言的功能是不完整的。運(yùn)算符允許我們對(duì)操作數(shù)執(zhí)行不同類型的運(yùn)算。在Go語(yǔ)言中,可以根據(jù)操作員的不同功能對(duì)其進(jìn)行分類:
這些用于對(duì)Go語(yǔ)言中的操作數(shù)執(zhí)行算術(shù)/數(shù)學(xué)運(yùn)算:
加法: “ +”運(yùn)算符將兩個(gè)操作數(shù)相加。例如,x + y。
減法: “-”運(yùn)算符減去兩個(gè)操作數(shù)。例如,x-y。
乘法: '*' 運(yùn)算符將兩個(gè)操作數(shù)相乘。例如,x * y。
除法: '/' 運(yùn)算符將第一個(gè)操作數(shù)除以第二個(gè)。例如,x / y。
求模:當(dāng)?shù)谝粋€(gè)操作數(shù)除以第二個(gè)操作數(shù)時(shí),'%'運(yùn)算符返回余數(shù)。例如,x%y。
注意: -,+,!,&,*,<-和^也稱為一元運(yùn)算符,一元運(yùn)算符的優(yōu)先級(jí)更高。++和—運(yùn)算符來(lái)自于語(yǔ)句,它們不是表達(dá)式,因此不在運(yùn)算符層次結(jié)構(gòu)中。
package main
import "fmt"
func main() {
p := 34
q := 20
// 加法
result1 := p + q
fmt.Printf("計(jì)算結(jié)果 p + q = %d", result1)
// 減法
result2 := p - q
fmt.Printf("\n計(jì)算結(jié)果 p - q = %d", result2)
// 乘法
result3 := p * q
fmt.Printf("\n計(jì)算結(jié)果 p * q = %d", result3)
// 除法
result4 := p / q
fmt.Printf("\n計(jì)算結(jié)果 p / q = %d", result4)
// 求模
result5 := p % q
fmt.Printf("\n計(jì)算結(jié)果 p %% q = %d", result5)
}輸出:
計(jì)算結(jié)果 p + q = 54 計(jì)算結(jié)果 p - q = 14 計(jì)算結(jié)果 p * q = 680 計(jì)算結(jié)果 p / q = 1 計(jì)算結(jié)果 p % q = 14
關(guān)系運(yùn)算符用于比較兩個(gè)值。讓我們一一看一下:
'=='(等于)運(yùn)算符檢查兩個(gè)給定的操作數(shù)是否相等。如果相等,則返回true。否則,它返回false。例如,5 == 5將返回true。
'!='(不等于)運(yùn)算符檢查兩個(gè)給定的操作數(shù)是否相等。如果不相等,則返回true。否則,它返回false。它是'=='運(yùn)算符的精確布爾補(bǔ)碼。例如,5!= 5將返回false。
'>'(大于)運(yùn)算符檢查第一個(gè)操作數(shù)是否大于第二個(gè)操作數(shù)。如果大于,則返回true。否則,它返回false。例如,6> 5將返回true。
'<'(小于)運(yùn)算符檢查第一個(gè)操作數(shù)是否小于第二個(gè)操作數(shù)。如果小于,則返回true。否則,它返回false。例如,6 <5將返回false。
'> ='(大于等于)運(yùn)算符檢查第一個(gè)操作數(shù)是否大于或等于第二個(gè)操作數(shù)。如果大于等于,則返回true。否則,它返回false。例如,5> = 5將返回true。
“ <=”(小于等于)運(yùn)算符檢查第一個(gè)操作數(shù)是否小于或等于第二個(gè)操作數(shù)。如果小于等于,則返回true。否則,它返回false。例如,5 <= 5也將返回true。
package main
import "fmt"
func main() {
p := 34
q := 20
// ‘=='(相等)
result1 := p == q
fmt.Println(result1)
// ‘!='(不等于)
result2 := p != q
fmt.Println(result2)
// ‘<‘(小于)
result3 := p < q
fmt.Println(result3)
// ‘>'(大于)
result4 := p > q
fmt.Println(result4)
// ‘>='(大于等于)
result5 := p >= q
fmt.Println(result5)
// ‘<='(小于等于)
result6 := p <= q
fmt.Println(result6)
}輸出:
false true false true true false
它們用于合并兩個(gè)或更多的條件/約束,或補(bǔ)充考慮的原始條件的評(píng)估。
邏輯AND:當(dāng)考慮的兩個(gè)條件都滿足時(shí),&&操作符返回true。否則返回false。例如,當(dāng)a和b都為真(即非零)時(shí),a && b返回真。
邏輯或: 當(dāng)其中一個(gè)(或兩個(gè))條件滿足時(shí),“||”操作符返回true。否則返回false。例如,如果a或b中的一個(gè)為真(即非零),|| b返回true。當(dāng)然,當(dāng)a和b都為真時(shí),它返回true。
邏輯非: 即不滿足考慮條件,“!” 運(yùn)算符返回true。否則,它返回false。例如,如果a為假,即a = 0,則!a返回true。
package main
import "fmt"
func main() {
var p int = 23
var q int = 60
if p != q && p <= q {
fmt.Println("True")
}
if p != q || p <= q {
fmt.Println("True")
}
if !(p == q) {
fmt.Println("True")
}
}輸出:
True True True
在Go語(yǔ)言中,有6個(gè)按位運(yùn)算符可按位工作或用于逐位操作。以下是按位運(yùn)算符:
&(按位與):將兩個(gè)數(shù)字作為操作數(shù),并對(duì)兩個(gè)數(shù)字的每一位進(jìn)行“與”運(yùn)算。僅當(dāng)兩個(gè)位均為1時(shí),AND的結(jié)果才為1。
| (按位或):將兩個(gè)數(shù)字作為操作數(shù),并對(duì)兩個(gè)數(shù)字的每一位進(jìn)行“或”運(yùn)算。兩個(gè)位中的任何一個(gè)為1,OR的結(jié)果為1。
^(按位XOR):將兩個(gè)數(shù)字作為操作數(shù),并對(duì)兩個(gè)數(shù)字的每一位進(jìn)行XOR。如果兩個(gè)位不同,則XOR的結(jié)果為1。
<<(左移):取兩個(gè)數(shù)字,左移第一個(gè)操作數(shù)的位,第二個(gè)操作數(shù)決定移位的位數(shù)。
>>(右移):取兩個(gè)數(shù)字,右移第一個(gè)操作數(shù)的位,第二個(gè)操作數(shù)決定移位的位數(shù)。
&^(AND NOT):(按位清除)運(yùn)算符,該運(yùn)算符的實(shí)際操作為&(^)操作。
package main
import "fmt"
func main() {
p := 134
q := 320
// & (AND)
result1 := p & q
fmt.Printf("計(jì)算結(jié)果 p & q = %d", result1)
// | (OR)
result2 := p | q
fmt.Printf("\n計(jì)算結(jié)果 p | q = %d", result2)
// ^ (XOR)
result3 := p ^ q
fmt.Printf("\n計(jì)算結(jié)果 p ^ q = %d", result3)
// << (左移)
result4 := p << 1
fmt.Printf("\n計(jì)算結(jié)果 p << 1 = %d", result4)
// >> (右移)
result5 := p >> 1
fmt.Printf("\n計(jì)算結(jié)果 p >> 1 = %d", result5)
// &^ (AND NOT)
result6 := p &^ q
fmt.Printf("\n計(jì)算結(jié)果 p &^ q = %d", result6)
}輸出:
計(jì)算結(jié)果 p & q = 0 計(jì)算結(jié)果 p | q = 454 計(jì)算結(jié)果 p ^ q = 454 計(jì)算結(jié)果 p << 1 = 268 計(jì)算結(jié)果 p >> 1 = 67 計(jì)算結(jié)果 p &^ q = 134
賦值運(yùn)算符用于為變量賦值。賦值運(yùn)算符的左側(cè)操作數(shù)是一個(gè)變量,而賦值運(yùn)算符的右側(cè)操作數(shù)是一個(gè)值。右側(cè)的值必須與左側(cè)的變量具有相同的數(shù)據(jù)類型,否則編譯器將拋出錯(cuò)誤。不同類型的賦值運(yùn)算符如下所示:
“ =”(簡(jiǎn)單賦值):這是最簡(jiǎn)單的賦值運(yùn)算符。該運(yùn)算符用于將右側(cè)的值分配給左側(cè)的變量。
“ + =”(加法賦值):此運(yùn)算符是'+'和'='運(yùn)算符的組合。該運(yùn)算符首先將左側(cè)變量的當(dāng)前值添加到右側(cè)的值,然后將結(jié)果分配給左側(cè)的變量。
“-=”(減法賦值):此運(yùn)算符是'-'和'='運(yùn)算符的組合。該運(yùn)算符首先從右側(cè)的值中減去左側(cè)變量的當(dāng)前值,然后將結(jié)果分配給左側(cè)的變量。
“ * =”(乘法賦值):此運(yùn)算符是'*'和'='運(yùn)算符的組合。該運(yùn)算符首先將左側(cè)變量的當(dāng)前值乘以右側(cè)值,然后將結(jié)果分配給左側(cè)變量。
“ / =”(除法賦值):此運(yùn)算符是'/'和'='運(yùn)算符的組合。該運(yùn)算符首先將左側(cè)變量的當(dāng)前值除以右側(cè)值,然后將結(jié)果分配給左側(cè)變量。
“%=”(模賦值):此運(yùn)算符是“%”和“ =”運(yùn)算符的組合。該運(yùn)算符首先對(duì)左側(cè)變量的當(dāng)前值乘以右側(cè)變量的值,然后將結(jié)果賦給左側(cè)變量。
“&=”(按位與賦值):此運(yùn)算符是'&'和'='運(yùn)算符的組合。該運(yùn)算符首先將左側(cè)變量的當(dāng)前值與右側(cè)變量進(jìn)行“按位與”運(yùn)算,然后將結(jié)果分配給左側(cè)變量。
“ ^ =”(按位異或):此運(yùn)算符是'^'和'='運(yùn)算符的組合。該運(yùn)算符首先將左側(cè)變量的當(dāng)前值與右側(cè)變量進(jìn)行“按位異或”,然后將結(jié)果分配給左側(cè)變量。
“ | =”(按位或):此運(yùn)算符是“ |”和'='運(yùn)算符的組合。該運(yùn)算符首先將左邊變量的當(dāng)前值與右邊的值“按位或”,然后將結(jié)果分配給左邊的變量。
package main
import "fmt"
func main() {
var p int = 38
var q int = 70
// “=”(簡(jiǎn)單賦值)
p = q
fmt.Println(p)
// “+=”(加法賦值)
p += q
fmt.Println(p)
//“-=”(減法賦值)
p-=q
fmt.Println(p)
// “*=”(乘法賦值)
p*= q
fmt.Println(p)
// “/=”(除法賦值)
p /= q
fmt.Println(p)
// “%=”(求模賦值)
p %= q
fmt.Println(p)
}輸出:
70 140 70 4900 70 0
&:此運(yùn)算符返回變量的地址。
*:此運(yùn)算符提供指向變量的指針。
<-:該運(yùn)算符的名稱為接收。它用于從通道接收值。
package main
import "fmt"
func main() {
a := 94
//使用運(yùn)算符(&)和
//指針間接(*)運(yùn)算符
b := &a
fmt.Println(*b)
*b = 67
fmt.Println(a)
}輸出:
94 67