[TOC]
# 運算符
* 算術運算符
* 關系運算符
* 邏輯運算符
* 位運算符
* 賦值運算符
* 其他運算符
## 算術運算符
| 運算符 | 描述 |
| --- | --- |
| + | 相加 |
| \- | 相減 |
| \* | 相乘 |
| / | 相除 |
| % | 求余 |
**注意:**`++`(自增)和`--`(自減)在Go語言中是單獨的語句,并不是運算符。
## 關系運算符
| 運算符 | 描述 |
| --- | --- |
| \== | 檢查兩個值是否相等,如果相等返回 True 否則返回 False。 |
| != | 檢查兩個值是否不相等,如果不相等返回 True 否則返回 False。 |
| \> | 檢查左邊值是否大于右邊值,如果是返回 True 否則返回 False。 |
| \>= | 檢查左邊值是否大于等于右邊值,如果是返回 True 否則返回 False。 |
| < | 檢查左邊值是否小于右邊值,如果是返回 True 否則返回 False。 |
| <= | 檢查左邊值是否小于等于右邊值,如果是返回 True 否則返回 False。 |
## 邏輯運算符
| 運算符 | 描述 |
| --- | --- |
| && | 邏輯 AND 運算符。 如果兩邊的操作數都是 True,則為 True,否則為 False。 |
| \|\| | 邏輯 OR 運算符。 如果兩邊的操作數有一個 True,則為 True,否則為 False。 |
| ! | 邏輯 NOT 運算符。 如果條件為 True,則為 False,否則為 True。 |
## 位運算符
| 運算符 | 描述 |
| --- | --- |
| & | 參與運算的兩數各對應的二進位相與。 (兩位均為1才為1) |
| \| | 參與運算的兩數各對應的二進位相或。 (兩位有一個為1就為1) |
| ^ | 參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。 (兩位不一樣則為1) |
| << | 左移n位就是乘以2的n次方。 “a<<b”是把a的各二進位全部左移b位,高位丟棄,低位補0。 |
| \>> | 右移n位就是除以2的n次方。 “a>>b”是把a的各二進位全部右移b位。 |
位運算符 &, |, 和 ^ 的計算:
| p \| q | p & q | p | q | p ^ q |
| --- | --- | --- | --- | --- |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
~~~
packagemain
import"fmt"
funcmain(){
? ?var auint=60? ? ?/* 60 = 0011 1100 */?
? ?var buint=13? ? ?/* 13 = 0000 1101 */
? ?var cuint=0? ? ? ? ?
? ?c=a & b ? ? ?/* 12 = 0000 1100 */
? ?fmt.Printf("第一行 - c 的值為 %d\n",c)
//第一行 - c 的值為 12
? ?c=a|b ? ? ?/* 61 = 0011 1101 */
? ?fmt.Printf("第二行 - c 的值為 %d\n",c)
//第二行 - c 的值為 61
? ?c=a^b ? ? /* 49 = 0011 0001 */
? ?fmt.Printf("第三行 - c 的值為 %d\n",c)
//第三行 - c 的值為 49
? ?c=a <<2? ?/* 240 = 1111 0000 */
? ?fmt.Printf("第四行 - c 的值為 %d\n",c)
//第四行 - c 的值為 240
? ?c=a >>2? ?/* 15 = 0000 1111 */
? ?fmt.Printf("第五行 - c 的值為 %d\n",c)
//第五行 - c 的值為 15
}
~~~
## 賦值運算符
| 運算符 | 描述 | 實例 |
| --- | --- | --- |
| \= | 簡單的賦值運算符,將一個表達式的值賦給一個左值 | C = A + B 將 A + B 表達式結果賦值給 C |
| += | 相加后再賦值 | C += A 等于 C = C + A |
| \-= | 相減后再賦值 | C -= A 等于 C = C - A |
| \*= | 相乘后再賦值 | C \*= A 等于 C = C \* A |
| /= | 相除后再賦值 | C /= A 等于 C = C / A |
| %= | 求余后再賦值 | C %= A 等于 C = C % A |
| <<= | 左移后賦值 | C <<= 2 等于 C = C << 2 |
| \>>= | 右移后賦值 | C >>= 2 等于 C = C >> 2 |
| &= | 按位與后賦值 | C &= 2 等于 C = C & 2 |
| ^= | 按位異或后賦值 | C ^= 2 等于 C = C ^ 2 |
| \|= | 按位或后賦值 | C \|= 2 等于 C = C \| 2 |
~~~
packagemain
import"fmt"
funcmain(){
? ?var aint=21
? ?var cint
? ?c =?a
? ?fmt.Printf("第 1 行 - = ?運算符實例,c 值為 = %d\n",c)
//第 1 行 - = 運算符實例,c 值為 = 21
? ?c +=?a
? ?fmt.Printf("第 2 行 - += 運算符實例,c 值為 = %d\n",c)
//第 2 行 - += 運算符實例,c 值為 = 42
? ?c -=?a
? ?fmt.Printf("第 3 行 - -= 運算符實例,c 值為 = %d\n",c)
//第 3 行 - -= 運算符實例,c 值為 = 21
? ?c *=?a
? ?fmt.Printf("第 4 行 - *= 運算符實例,c 值為 = %d\n",c)
//第 4 行 - *= 運算符實例,c 值為 = 441
? ?c /=?a
? ?fmt.Printf("第 5 行 - /= 運算符實例,c 值為 = %d\n",c)
//第 5 行 - /= 運算符實例,c 值為 = 21
? ?c ?=200;
? ?c <<=?2
? ?fmt.Printf("第 6行 ?- <<= 運算符實例,c 值為 = %d\n",c)
//第 6行 - <<= 運算符實例,c 值為 = 800
? ?c >>=?2
? ?fmt.Printf("第 7 行 - >>= 運算符實例,c 值為 = %d\n",c)
//第 7 行 - >>= 運算符實例,c 值為 = 200
? ?c &=?2
? ?fmt.Printf("第 8 行 - &= 運算符實例,c 值為 = %d\n",c)
//第 8 行 - &= 運算符實例,c 值為 = 0
? ?c ^=?2
? ?fmt.Printf("第 9 行 - ^= 運算符實例,c 值為 = %d\n",c)
//第 9 行 - ^= 運算符實例,c 值為 = 2
? ?c |=?2
? ?fmt.Printf("第 10 行 - |= 運算符實例,c 值為 = %d\n",c)
//第 10 行 - |= 運算符實例,c 值為 = 2
}
~~~
## 其他運算符
| 運算符 | 描述 | 實例 |
| --- | --- | --- |
| & | 返回變量存儲地址 | &a; 將給出變量的實際地址。 |
| \* | 指針變量。 | \*a; 是一個指針變量 |
- Go準備工作
- 依賴管理
- Go基礎
- 1、變量和常量
- 2、基本數據類型
- 3、運算符
- 4、流程控制
- 5、數組
- 數組聲明和初始化
- 遍歷
- 數組是值類型
- 6、切片
- 定義
- slice其他內容
- 7、map
- 8、函數
- 函數基礎
- 函數進階
- 9、指針
- 10、結構體
- 類型別名和自定義類型
- 結構體
- 11、接口
- 12、反射
- 13、并發
- 14、網絡編程
- 15、單元測試
- Go常用庫/包
- Context
- time
- strings/strconv
- file
- http
- Go常用第三方包
- Go優化
- Go問題排查
- Go框架
- 基礎知識點的思考
- 面試題
- 八股文
- 操作系統
- 整理一份資料
- interface
- array
- slice
- map
- MUTEX
- RWMUTEX
- Channel
- waitGroup
- context
- reflect
- gc
- GMP和CSP
- Select
- Docker
- 基本命令
- dockerfile
- docker-compose
- rpc和grpc
- consul和etcd
- ETCD
- consul
- gin
- 一些小點
- 樹
- K8s
- ES
- pprof
- mycat
- nginx
- 整理后的面試題
- 基礎
- Map
- Chan
- GC
- GMP
- 并發
- 內存
- 算法
- docker