運(yùn)算符是任何編程語言的基礎(chǔ)。因此,在不使用運(yùn)算符的情況下,Go語言的功能是不完整的。運(yùn)算符允許我們對(duì)操作數(shù)執(zhí)行不同類型的運(yùn)算。在Go語言中,可以根據(jù)操作員的不同功能對(duì)其進(jìn)行分類:
這些用于對(duì)Go語言中的操作數(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)算符來自于語句,它們不是表達(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語言中,有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