一、算術運算子
| 運算子 | 描述 |
|---|---|
| + | 相加 |
| - | 相減 |
| * | 相乘 |
| / | 相除 |
| % | 求余 |
代碼示例:
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 // 算術運算子 7 a := 5 8 b := 2 9 ? 10 fmt.Printf("a+b=%v\n", a+b) // a+b=7 11 fmt.Printf("a-b=%v\n", a-b) // a-b=3 12 fmt.Printf("a*b=%v\n", a*b) // a*b=10 13 fmt.Printf("a/b=%v\n", a/b) // a/b=2 14 fmt.Printf("a%%b=%v\n", a%b) // a%b=1 想要列印%號,可以用%轉義,即 %% 15 }
注意: ++(自增)和 --(自減)在Go語言中是單獨的陳述句,并不是運算子,
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 a := 5 7 b := 2 8 9 if a > 4 { 10 a++ 11 } else { 12 a-- 13 } 14 fmt.Print(a) 15 }
二、關系運算子
| 運算子 | 描述 |
|---|---|
| == | 檢查兩個值是否相等,如果相等回傳 True 否則回傳 False, |
| != | 檢查兩個值是否不相等,如果不相等回傳 True 否則回傳 False, |
| > | 檢查左邊值是否大于右邊值,如果是回傳 True 否則回傳 False, |
| >= | 檢查左邊值是否大于等于右邊值,如果是回傳 True 否則回傳 False, |
| < | 檢查左邊值是否小于右邊值,如果是回傳 True 否則回傳 False, |
| <= | 檢查左邊值是否小于等于右邊值,如果是回傳 True 否則回傳 False, |
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 a := 5 7 b := 2 8 ? 9 fmt.Println(a == b) // false 10 fmt.Println(a != b) // true 11 fmt.Println(a > b) // true 12 fmt.Println(a >= b) // true 13 fmt.Println(a < b) // false 14 fmt.Println(a <= b) // false 15 }
三、邏輯運算子
| 運算子 | 描述 |
|---|---|
| && | 邏輯 AND 運算子, 如果兩邊的運算元都是 True,則為 True,否則為 False, |
| || | 邏輯 OR 運算子, 如果兩邊的運算元有一個 True,則為 True,否則為 False, |
| ! | 邏輯 NOT 運算子, 如果條件為 True,則為 False,否則為 True, |
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 a := 5 7 b := 2 8 c := 3 9 ? 10 fmt.Println(a > b && c > b) // true 11 fmt.Println(a < b && c > b) // false 12 ? 13 fmt.Println(a > b || c > b) // true 14 fmt.Println(a < b || c < b) // false 15 ? 16 fmt.Println(!(a > b)) // false 17 }
四、位運算子
位運算子對整數在記憶體中的二進制位進行操作
| 運算子 | 描述 |
|---|---|
| & | 參與運算的兩數各對應的二進位相與, (兩位均為1才為1) |
| | | 參與運算的兩數各對應的二進位相或, (兩位有一個為1就為1) |
| ^ | 參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1, (兩位不一樣則為1) |
| << | 左移n位就是乘以2的n次方, “a<<b”是把a的各二進位全部左移b位,高位丟棄,低位補0, |
| >> | 右移n位就是除以2的n次方, “a>>b”是把a的各二進位全部右移b位, |
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 a := 5 // 0101 7 b := 6 // 0110 8 ? 9 fmt.Println(a & b) // 4 10 fmt.Println(a | b) // 7 11 fmt.Println(a ^ b) // 3 12 fmt.Println(a >> 1) // 2 13 fmt.Println(a << 1) // 10 14 }
分析:
1 a --轉換成二進制--> 0101 2 b -- 轉換成二進制--> 0110 3 0101 4 a & b ---> 0110 5 -------- 6 0100 ---> 轉換成十進制為 4 7 8 0101 9 a | b ---> 0110 10 -------- 11 0111 ---> 轉換成十進制為 7 12 ? 13 0101 14 a ^ b ---> 0110 15 -------- 16 0011 ---> 轉換成十進制為 3 17 18 a >> 1 ---> 0101 ---> 所有位向右(后)移動一位,在最前面補0 ---> 0010 ---> 轉換成十進制 2 19 ? 20 a << 1 ---> 0101 ---> 所有位向左(前)移動一位,在最后面補0 ---> 1010 ---> 轉換成十進制 10
注意,對于位的移動操作,如果超過原本資料型別的長度,只會從后往前保留對應的位數,如:
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 a := int8(1) // 定義一個八位的整數 7 fmt.Println(a << 10) // 0 8 }
分析:
a<<1 ---> 00000001 ---> 所有位向左移動十位在最后面補0 ---> 10000000000 ---> 但是a最長只能是八位,多以只能從右往左保留八位,00000000,轉換成十進制結果為0
示例:有一堆數字,如果除了一個數字以外,其他數字都出現了兩次,那么如何找到出現一次的數字?
思路:可以使用異或運算操作,0 與任何數值異或的結果都為值本身,相同的值異或結果為 0
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 nums := [...]int{1, 1, 2, 3, 2} 7 obj := 0 8 for _, v := range nums { 9 obj ^= v 10 } 11 fmt.Println(obj) 12 }
五、賦值運算子
| 運算子 | 描述 |
|---|---|
| = | 簡單的賦值運算子,將一個運算式的值賦給一個左值 |
| += | 相加后再賦值 |
| -= | 相減后再賦值 |
| *= | 相乘后再賦值 |
| /= | 相除后再賦值 |
| %= | 求余后再賦值 |
| <<= | 左移后賦值 |
| >>= | 右移后賦值 |
| &= | 按位與后賦值 |
| |= | 按位或后賦值 |
| ^= | 按位異或后賦值 |
1 package main 2 ? 3 import "fmt" 4 ? 5 func main() { 6 a := 5 7 ? 8 var b int 9 b = a 10 fmt.Println(b) 11 ? 12 a += 2 // a = a + 2 13 a -= 2 // a = a - 2 14 a *= 2 // a = a * 2 15 a /= 2 // a = a / 2 16 a %= 2 // a = a % 2 17 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546612.html
標籤:其他
下一篇:pheatmap實用引數(二)
