運算子用於在程式執行時執行數學或邏輯運算。
Go語言內建的運算子有:
- 算術運算子
- 關係運算子
- 邏輯運算子
- 位運算子
- 賦值運算子
- 其他運算子
算術運算子
- 算術運算子主要有:+、-、*、/、%(求餘)、++(自增)、--(自減)
關係運算子
- 關係運算子主要有:==、!=、>、<、>=、<=
邏輯運算子
- 邏輯運算子主要有:&&(邏輯AND)、|| (邏輯OR)、! (邏輯NOT)
位運算子
位運算子對整數在記憶體中的二進位制進行操作。
位運算子比一般的算術運算子速度要快,而且可以實現一些算術運算子不能實現的功能。如果要開發高效率程式,位運算子是必不可少的。位運算子用來對二進位制進行操作,包括:按位與(&)、按位或(|)、按位異或(^)、按位左移(<<)、按位右移(>>)
按位與
按位與(&):對兩個數進行操作,然後返回一個新的數,這個數的每個位都需要兩個輸入數的同一位都為1時 才為1。簡單的說:同一位同時為1 則為1
按位或
按位或(|):比較兩個數,然後返回一個新的數,這個數的每一位置設定1的條件是任意一個數的同一位為1 則為1。簡單的說:同一位其中一個為1 則為1
按位異或
按位異或(^):比較兩個數,然後返回一個數,這個數的每一位設為1的條件是兩個輸入數的同一位不同 則為1,如果相同就設為 0 。簡單的說:同一位不相同 則為1
左移運算子(<<)
按二進位制形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零
- 語法格式:
- 需要移位的數字 << 移位的次數
- 例如:3 << 4,則是將 數字3 左移了4位
- 計算過程:
- 3 << 4
- 首先把 3 轉換為 二進位制數字 0000 0000 0000 0000 0000 0000 0000 0011,然後把該數字高位(左側)的兩個零移出。其他的數字都朝左平移4位,最後在 低位(右側)的兩個空位補零,則得到的最終結果為 0000 0000 0000 0000 0000 0000 0011 0000,則轉換為十進位制為 48
- 用 3 * 2 ^4 計算 更加方便,3 乘以 2 的4次方
- 數字意義
- 在數字沒有溢位的前提下,對於正數 和 負數,左移一位 都相當於 乘以 2的一次方,左移 n 位就相當於 乘以2的 n 次方
右移運算子(>>)
按二進位制形式把所有的數字都向右移動對應 位移位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數 補1
- 語法格式
- 需要移位的數字 >> 移位的次數
- 例如:11 >> 2,則是將數字 11 右移2位
- 計算過程
- 11的二進位制形式為:0000 0000 0000 0000 0000 0000 0000 1011,然後把低位的最後兩個數字移出,因為該數字是正數,所有在高位補零,則得到的最終結果為 0000 0000 0000 0000 0000 0000 0000 0010,轉化為十進位制為2
- 用 11 / (2 ^ 2) 計算 更加方便,11 除以 2 的2次方
- 數字意義
- 右移一位相當於 除2,右移 n 位,則相當於 除以2的 n 次方
賦值運算子
賦值運算子有:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。
DEMO示例
以下是上面知識點的程式碼演示:
package main
import "fmt"
var a = 21.0
var b = 5.0
var c float64
func main() {
fmt.Println("算術運算子 --- start---")
Arithmetic()
fmt.Println()
fmt.Println("關係運算子 --- start---")
Relational()
fmt.Println()
fmt.Println("邏輯運算子 --- start---")
Logical()
fmt.Println()
fmt.Println("位運算子 --- start---")
Bitwise()
fmt.Println()
fmt.Println("賦值運算子 --- start---")
Assignment()
fmt.Println()
}
// 算術運算子
func Arithmetic() {
c = a + b
fmt.Printf("第一行 - c 的值為 %.2f\n", c)
c = a - b
fmt.Printf("第二行 - c 的值為 %.2f\n", c)
c = a * b
fmt.Printf("第三行 - c 的值為 %.2f\n", c)
c = a / b
fmt.Printf("第四行 - c 的值為 %.2f\n", c)
//c = a % b
fmt.Printf("第五行 - c 的值為 %d\n", int(a)%int(b))
a++
fmt.Printf("第六行 - a 的值為 %f\n", a)
a = 21
a--
fmt.Printf("第七行 - a 的值為 %f\n", a)
}
// 關係運算子
func Relational() {
if (a == b) {
fmt.Printf("第一行 - a 等於 b \n")
} else {
fmt.Printf("第一行 - a 不等於 b \n")
}
if (a < b) {
fmt.Printf("第二行 - a 小於 b \n")
} else {
fmt.Printf("第二行 - a 不小於 b \n")
}
if (a > b) {
fmt.Printf("第三行 - a 大於 b \n")
} else {
fmt.Printf("第三行 - a 不大於 b \n")
}
}
// 邏輯運算子
func Logical() {
a := true
b := false
if (a && b) {
fmt.Printf("第一行 - 條件為 true \n")
}
if (a || b) {
fmt.Printf("第二行 - 條件為 true \n")
}
if (!(a && b)) {
fmt.Printf("第三行 - 條件為 true \n")
}
}
// 位運算子
func Bitwise() {
fmt.Println(252 & 63)
fmt.Println(178 | 94)
fmt.Println(20 ^ 5)
fmt.Println(3 << 4) // 3 * 2 ^ 4
fmt.Println(11 >> 2) // 11 / (2 ^ 2)
}
// 賦值運算子
func Assignment() {
c = a
fmt.Printf("第1行 - =運算子例項,c的值為 %f \n", c)
c += a
fmt.Printf("第2行 - +=運算子例項,c的值為 %f \n", c)
c -= a
fmt.Printf("第3行 - -=運算子例項,c的值為 %f \n", c)
c *= a
fmt.Printf("第4行 - *=運算子例項,c的值為 %f \n", c)
c /= a
fmt.Printf("第5行 - /=運算子例項,c的值為 %f \n", c)
c = a
fmt.Printf("第6行 - =運算子例項,c的值為 %f \n", c)
d := 200
d <<= 2
fmt.Printf("第7行 - <<=運算子例項,d的值為 %d \n", d) // d = d * 2^2 = 200 * 2^2 = 800
d >>= 2
fmt.Printf("第8行 - >>=運算子例項,d的值為 %d \n", d) // d = d / (2^2) = 800 / (2^2) = 200
d &= 2
fmt.Printf("第9行 - &=運算子例項,d的值為 %d \n", d) // d = d & 2 = 0
d |= 2
fmt.Printf("第10行 - |=運算子例項,d的值為 %d \n", d) // d = d | 2 = 2
d ^= 2
fmt.Printf("第11行 - ^=運算子例項,d的值為 %d \n", d) // d = d ^ 2 = 0
}
複製程式碼
執行結果為:
算術運算子 --- start---
第一行 - c 的值為 26.00
第二行 - c 的值為 16.00
第三行 - c 的值為 105.00
第四行 - c 的值為 4.20
第五行 - c 的值為 1
第六行 - a 的值為 22.000000
第七行 - a 的值為 20.000000
關係運算子 --- start---
第一行 - a 不等於 b
第二行 - a 不小於 b
第三行 - a 大於 b
邏輯運算子 --- start---
第二行 - 條件為 true
第三行 - 條件為 true
位運算子 --- start---
60
254
17
48
2
賦值運算子 --- start---
第1行 - =運算子例項,c的值為 20.000000
第2行 - +=運算子例項,c的值為 40.000000
第3行 - -=運算子例項,c的值為 20.000000
第4行 - *=運算子例項,c的值為 400.000000
第5行 - /=運算子例項,c的值為 20.000000
第6行 - =運算子例項,c的值為 20.000000
第7行 - <<=運算子例項,d的值為 800
第8行 - >>=運算子例項,d的值為 200
第9行 - &=運算子例項,d的值為 0
第10行 - |=運算子例項,d的值為 2
第11行 - ^=運算子例項,d的值為 0
複製程式碼
歡迎關注我的公眾號~ 搜尋公眾號: 翻身碼農把歌唱 或者 掃描下方二維碼: