讓我們一起Go(八)


前言:

         嘆時間總是那么滴不夠,離上次發本系列文章又很久了,由於總總原因,到現在才更新,唉,不多說了,今天繼續我們的Golang......

 

Go語言中的運算符

      

 

上述表格(引自網絡)已經很清楚的展示了Go語言的運算符已經它們的優先級,對於非常常見的這里就不一一介紹了,這里舉幾個運算符來玩玩。

先看一例子:題目--給定一個int型數組,找出其中的奇數,打印出來?。大家動手試試,可以選擇上面表格中的任意運算符完成。

這題目很簡單,如果一個數不能被2整除,那么就是奇數,好,我們試試%運算符,該運算符是取模,也就是說可以取得余數,那么如果對2取模,結果不是0,那么就是奇數了。看代碼:

 

這里定義了一個isOdd的方法用來判斷數字是否是奇數,返回值是bool類型。該方法一個比較常見的錯誤是,有人會誤認為模2后等於1 既 num%2==1則是奇數,但是這是不對的,因為當出現負數的時候,不管是奇數還是偶數都返回false,顯然余數是負數的話不管如何都不會和1相等。如果你編譯上面的代碼,會發生奇怪的事情。尼瑪,竟然是病毒???雖然明顯是誤報,但是我還是很詫異啊。不知道在你的機子上如何。

其實也沒必要覺得奇怪,殺毒軟件一般都是根據特征碼來判斷是否是病毒,因此,某個程序編譯出來的應用恰好符合也是很有可能的,因此我們也常常看到殺毒軟件誤殺某某軟件了。要解決這個其實也簡單,有時候只需調整下代碼結構或者內容就可以了,這里我在打印結果下增加一行換行代碼 fmt.Println()就沒問題了。

除了通過使用%運算符,其實還可以通過&運算符進行判斷奇數。原理就是:

(一)位運算的時候,我們知道任何奇數的二進制表示最低位都是1,

例如 1 的二進制 0000 0001(為了方便描述,這里都取8位二進制來表示) ,3的二進制 0000 0011 ,21的二進制 0001 0101  ...

(二)而&運算規則是 1&1 = 1 ,0&0 = 0,0&1=0,1&0=0.總之0&任何數都是0 只有1&1才是1 。

那么我們就根據(一) (二)便可以拿1 二進制為 0000 0001 與任意數進行&運算,如果與1相&的數字是奇數,則結果高位全部是0,最低位1&1=1 最后是0000 0001。

最后代碼如下:

 再來看一個Go語言中特別點的運算符 &^ 表示and not

假設 a &^ b 則該運算會從a上清除所有b的標志位,這是什么意思呢?還是看例子:

a : 0000 0000 0010 0011                  = 35

b:  0000 0000 1100 0101                  = 197

===================

     0000 0000 0010 0010                   = 34

標志位這里是指為1的位,如果你覺得這樣記起來麻煩,其實它是先進行了a ^ b (XOR)運算,然后將結果與b再進行&運算。

 可以通過程序驗證結果:

 

這次就到這里了,更多操作符的具體用法將會在以后相關知識點用到時再詳細介紹。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM