C語言之簡單的位操作面試題

2021-08-11 05:06:59 字數 1409 閱讀 9550

不得不說位操作確實是乙個十分不錯的操作,只是簡單的幾步就足以笑傲江湖,今天看兩道簡單位操作面試題

分析:這還不簡單,直接讓這個整數依次往右邊移動一位,與1做與運算&,然後統計1的個數,等等,有詐,萬一是負數的話,這不就成死迴圈了嗎,思考片刻,簡單,這次就讓1不斷的往左邊移動,然後去與整數做與運算&,這也是可以的。。。再等等,萬一這台機器是坑爹的128位,就算是32位那效率也是不高的啊,思考良久,終於有了乙個穩妥的辦法

穩妥辦法:舉個例子,假設乙個整數的二進位制序列是1100,那麼將二進位制序列-1會得到1011,此時再將1100&1011=1000,哈哈,想到了吧只要將整數&(整數-1)就會得到剩下的1,此等解法只需要比較整數中1的個數次即可。

部分**(c/c++)

int num(int n)

return

count;

}

嗯,效果不錯,算是乙個比較好的解法了。

三種錯誤的處理方式:api、全域性變數、異常,需要考慮的是功能測試、邊界測試、負面測試

分析:這還不簡單,直接用乙個for迴圈就可以解決戰鬥,但有詐,萬一這個出現負數和0的情況那不就gg了,所以得考慮邊界測試和負面測試,但還是可以接受的,加入0和負數的判斷即可,但要注意double型別比較「==」時不準確,一般想到這就差不多了,但是凡是都有例外,這裡有個更好的解法。

穩妥辦法:由公式an

=an/

2∙an

/2(n

為偶數)

,an=

an−1

∙an−

1∙a(

n為奇數

這個公式實在是太棒了,雖然很簡單,但是卻十分的奏效,利用它結合神奇的遞迴,就可以以簡單的**實現上面的題目了。

完整**(c/c++)

今天上線的兩道位操作題目比較簡單,重點是梳理位操作在實戰中的應用,因為在講究效率的當代,乙個好的操作是會起到很棒的效果的,不得不說,劍指offer確實是一本好書,接下來繼續辛勤工作。。

C語言 兩道位操作的面試題

1 把乙個32位的數按位反轉,就是第32位轉到第1位,第31位轉到第2位 什麼樣的演算法最節省效率?參考unsignedint bit reverse unsignedint n 第一行 為奇偶位相互交換 第二行為以兩位為一單元,奇偶單元進行交換 第三行為以四位為一單元,奇偶單元進行交換 第四行為以...

C語言面試題分類 位運算

1.不用臨時變數交換兩個整數。a a b b a b a a b 2.實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如9的二進位制是1001,則輸出2。int check count fun int number return count int main 錯誤 如下 有符號數會造成...

的面試題 C語言面試題總結

下面是我在軟通動力的一些面試題,雖然有些模糊了,但是都還是在面試中經常會看到的一些題,而且通過我面試的這些題,也總結了一些面試經驗,這些都是面試時你必須要做好的。首先看面試題吧。1,寫乙個單鏈表,儲存1,2,3,然後寫乙個函式讓其記憶體反轉,3,2,1。2,忘了 3,c字串,this is a te...