您的位置:首頁>科技>正文

演算法練習題——位元運算

關注“愛當程式師的我”, 每天都有關於程式設計頭條發佈

今天給大家講講神奇的位運算, 有些想法總是那麼的出人意料。

不用額外的變數交換兩個整數的值

這題採用異或位運算, 異或的原理是相同位置的二進位值異或, 相同結果為0, 不同結果為1。

兩個相同的數異或結果等於0。

就這道題而言, 在運算過程中會產生一個中間值, 即a與b的異或結果, a異或b再異或b就會等於a, 如果第二次異或a就會等於b。

演示

所以直接三個異或就可以搞定

C++代碼實現

不用任何比較判斷兩個數中大的那個數

我們將兩個數做差, 得到另一個數, 判斷這個數的符號位元就可以了。 當然, 不能直接使用判斷語句, 所以我們使用位運算來操作。

C++代碼實現

整數的二進位中有多少個1

每次迴圈採用n&=(n-1), 這樣可以跳過二進位位元是0的數。

演示

C++代碼實現

陣列中只有一個數出現了奇數次, 其他數都出現偶數次, 找出這個數

這道題還是使用了異或的性質, 兩個相同的數異或等於0, 遍歷一遍陣列就可以得到出現奇數次的那個數。

C++代碼實現

結束語:

如果喜歡這篇頭條, 一定要收藏喲^O^

點擊關注, 瞭解更多關於程式設計的知識^O^

如果有不懂的地方, 可以留言, 相互探討, 相互學習, 共同進步^O^

Next Article
喜欢就按个赞吧!!!
点击关闭提示