《Golang 入門系列三》golang的運算子

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

前言:運算子優先順序,是描述在電腦運算計算運算式時執行運算的先後順序。 先執行具有較高優先順序的運算,然後執行較低優先順序的運算。

 

一、算數運算子

下表列出了所有Go語言的算術運算子。假定 A 值為 10,B 值為 20。

運算子                      描述                          執行個體                                                         
+ 相加 A + B 輸出結果 30
- 相減 A - B 輸出結果 -10
* 相乘 A * B 輸出結果 200
/ 相除 B / A 輸出結果 2
% 求餘 B % A 輸出結果 0
++ 自增 A++ 輸出結果 11
-- 自減 A-- 輸出結果 9

二、關係運算子

下表列出了所有Go語言的關係運算子。假定 A 值為 10,B 值為 20。

運算子 描述 執行個體
== 檢查兩個值是否相等,如果相等返回 True 否則返回 False。 (A == B) 為 False
!= 檢查兩個值是否不相等,如果不相等返回 True 否則返回 False。 (A != B) 為 True
> 檢查左邊值是否大於右邊值,如果是返回 True 否則返回 False。 (A > B) 為 False
< 檢查左邊值是否小於右邊值,如果是返回 True 否則返回 False。 (A < B) 為 True
>= 檢查左邊值是否大於等於右邊值,如果是返回 True 否則返回 False。 (A >= B) 為 False
<= 檢查左邊值是否小於等於右邊值,如果是返回 True 否則返回 False。 (A <= B) 為 True

三、邏輯運算子

下表列出了所有Go語言的邏輯運算子。假定 A 值為 True,B 值為 False。

運算子 描述 執行個體
&& 邏輯 AND 運算子。 如果兩邊的運算元都是 True,則條件 True,否則為 False。 (A && B) 為 False
|| 邏輯 OR 運算子。 如果兩邊的運算元有一個 True,則條件 True,否則為 False。 (A || B) 為 True
! 邏輯 NOT 運算子。 如果條件為 True,則邏輯 NOT 條件 False,否則為 True。 !(A && B) 為 True

四、位元運算符

位元運算符對整數在記憶體中的二進位位進行操作。假定 A 為60,B 為13

運算子 描述 執行個體
& 按位與運算子"&"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相與。 (A & B) 結果為 12, 二進位為 0000 1100
| 按位或運算子"|"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相或 (A | B) 結果為 61, 二進位為 0011 1101
^ 按位異或運算子"^"是雙目運算子。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。 (A ^ B) 結果為 49, 二進位為 0011 0001
<< 左移運算子"<<"是雙目運算子。左移n位就是乘以2的n次方。 其功能把"<<"左邊的運算數的各二進位全部左移若干位,由"<<"右邊的數指定移動的位元,高位丟棄,低位補0。 A << 2 結果為 240 ,二進位為 1111 0000
>> 右移運算子">>"是雙目運算子。右移n位就是除以2的n次方。 其功能是把">>"左邊的運算數的各二進位全部右移若干位,">>"右邊的數指定移動的位元。 A >> 2 結果為 15 ,二進位為 0000 1111

示範樣本:

package mainimport "fmt"func main() {   var a int = 60     //二進位是:111100     var b int = 13     //二進位是:001101   fmt.Printf("%b\n%d\n",a&b,a&b)    //二進位是:1100,對應的十進位是12。說明&進行的是上下對應位的與操作   fmt.Printf("%b\n%d\n",a|b,a|b)    //二進位是:111101,對應的十進位是61。說明&進行的是上下對應位的或操作   fmt.Printf("%b\n%d\n",a^b,a^b)    //二進位是:110001,對應的十進位是49。^位元運算符是上下對應位不同時,值為1}

左移右移運算子樣本(實現計算機儲存單位):

package mainimport "fmt"const (       KB float64 = 1<<(10*iota)      //iota是 const 結構裡面,定義常量行數的索引器,每個 const 裡面,iota 都從 0 開始    MB                             //下面是一個省略調用,繼承了上面的運算式    GB    TB    PB)func main() {   fmt.Printf("1MB = %vKB\n",MB)    fmt.Printf("1GB = %vKB\n",GB)   fmt.Printf("1TB = %vKB\n",TB)   fmt.Printf("1PB = %vKB\n",PB)}運行結果:1MB = 1024KB1GB = 1.048576e+06KB1TB = 1.073741824e+09KB1PB = 1.099511627776e+12KB

五、賦值運算子

下表列出了所有Go語言的賦值運算子。假定 A 為21

運算子  描述                                                                 執行個體                                                 
= 簡單的賦值運算子,將一個運算式的值賦給一個左值 C = A  將 A 賦值給 C,結果:21
+= 相加後再賦值 C += A 等於 C = C + A,結果:42
-= 相減後再賦值 C -= A 等於 C = C - A,結果:21
*= 相乘後再賦值 C *= A 等於 C = C * A,結果:441
/= 相除後再賦值 C /= A 等於 C = C / A,結果:21
%= 求餘後再賦值 C %= A 等於 C = C % A,結果:0//不記入計算
<<= 左移後賦值 C <<= 2 等於 C = C << 2,結果:84
>>= 右移後賦值 C >>= 2 等於 C = C >> 2,結果:21
&= 按位與後賦值 C &= 2 等於 C = C & 2,結果:0
^= 按位異或後賦值 C ^= 2 等於 C = C ^ 2,結果:2
|= 按位或後賦值 C |= 2 等於 C = C | 2,結果:2

六、其他運算子

運算子  描述                                                                執行個體                                                            
& 返回變數儲存地址 &a; 將給出變數的實際地址。
* 指標變數。 *a; 是一個指標變數

記憶體位址和指標的樣本:列印變數類型用%T

package mainimport "fmt"func main() {   var a int = 4   var b int32   var c float32   var ptr *int   fmt.Printf("a 變數類型為 = %T\n", a )     //輸出變數類型%T   fmt.Printf("b 變數類型為 = %T\n", b )   fmt.Printf("c 變數類型為 = %T\n", c )   ptr = &a       fmt.Printf("a 的記憶體位址為 = %p",ptr)     //go裡面的記憶體塊地址通常都是用十六進位表示的,因此輸出:0x10414020a   fmt.Printf("*ptr 為 %d\n", *ptr)        //這是個指向a的記憶體位址的指標,因此輸出:4}

七、運算子優先順序

有些運算子擁有較高的優先順序,二元運算子的運算方向均是從左至右。下表列出了所有運算子以及它們的優先順序,由上至下代表優先順序由高到低:

優先順序     運算子 7      ^ ! 6      * / % << >> & &^ 5      + - | ^ 4      == != < <= >= > 3      <- 2      && 1      ||

當然,你可以通過使用括弧來臨時提升某個運算式的整體運算優先順序。

參考:http://www.runoob.com/go/go-operators.html 

為了方便大家交流,本人開通了公眾號(關注看更多精彩)和QQ群,QQ群1(291519319)和QQ群2(659336691)。喜歡技術的一起來交流吧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.