運算符之趣

       C/C++裏面的運算符只是那個語言系統裏面的一個基礎小集合,但是作用卻無可替代;因爲它們是基礎性的東西,所以看起來比較平淡,常常在運算符所操縱的類型需要小心謹慎的時候能夠得到小心對待,在C++中也會因爲需要運算符重載的情境而變得複雜。但是,個人趕腳,在普通應用中,運算符們有時候也像小精靈一樣,有着令人耳目清新的生命力。

       很多人的經驗中,C/C++能夠高效優雅地執行一些運算,比如位移運算,從而可以對消耗較高的運算——如乘除法,執行效率上的優化。那麼,我們來點點三個小精靈吧。

 

  • 位與——"&"

       《編程之美》中有這樣一道小題:給定一個字節長的無符號整形數,求其二進制中“1”的個數。

        然後就有一個簡潔的函數來完成:

 

int count(BYTE v)

{

        int num = 0;

        while(v)

        {

                v &= (v - 1);

                ++num;

        }

        return num;

}


      值得玩味吧?怎麼辦到的,怎麼想到的......紙上比畫比畫就明朗了。

 

  • 異或——"^"

      現在有兩個整數x和y,我們需要交換它們的值,寫個以指針或者引用作參數的swap( )函數嗎?經典!但是下面的做法又如何?

        x = x^y;

        y = x^y;

        x = x^y;

      《ComputerSystems.A Programmer's Perspective》教導我們:這不能帶來什麼性能上的優異,但是提供了一種新的方法,多一條路,世界更寬敞了。但是,異或的生命力不單在開拓這個新思路上,強烈的趕腳......但是,我還沒想到好的例子

 

  • 邏輯與——"&&"

      有這麼一道小題:請寫一個函數——int print_num(int k){};     要求函數功能爲打印k的降序,直到0結束,即如果k=5,便打印:5  4  3  2  1  0   
      要求: 不能用 if,  if else,  switch,  ?:  ,  while,  for , do while,  goto 語句

      看看邏輯與是怎麼華麗地完成任務的吧!

int print_num(int k)

{

        printf("%d",k);

        k && print_num(k - 1);

        return k;

}


       其實,對於這個小貼子的收尾,我不知所措,因爲我趕腳到,小精靈們的生命一直在跳躍着,催促着我們去發現,體味和欣賞。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章