嘆時間老是那麼滴不夠,離上次發本系列文章又好久了,因爲總總緣由,到如今才更新,唉,很少說了,今天繼續咱們的Golang......數組
上述表格(引自網絡)已經很清楚的展現了Go語言的運算符已經它們的優先級,對於很是常見的這裏就不一一介紹了,這裏舉幾個運算符來玩玩。網絡
先看一例子:題目--給定一個int型數組,找出其中的奇數,打印出來?。你們動手試試,能夠選擇上面表格中的任意運算符完成。spa
這題目很簡單,若是一個數不能被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 。im
那麼咱們就根據(一) (二)即可以拿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再進行&運算。
能夠經過程序驗證結果:
此次就到這裏了,更多操做符的具體用法將會在之後相關知識點用到時再詳細介紹。