讓我們一起Go(八)

來源:互聯網
上載者:User
前言:

         歎時間總是那麼滴不夠,離上次發本系列文章又很久了,由於總總原因,到現在才更新,唉,不多說了,今天繼續我們的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再進行&運算。

 可以通過程式驗證結果:

 

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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.