在 C++ 中翻轉位


假設我們有一個無符號數 x,並且可以輕鬆地找出它的二進位制表示(32 位無符號整數)。我們的任務是反轉這些位。因此,如果二進位制表示為 00000000000000000000001001110100,則反轉的位將為 00101110010000000000000000000000。所以我們要在反轉位之後返回實際的數字

為了解決這個問題,我們將遵循以下步驟:-

  • 假設 n 是給定的數字
  • 讓 answer := 0
  • 對於 i := 31 到 0
    • answer := answer OR (n AND i),並將其向左移動 i 次
    • 將 n 右移 1 位後,將其設為 n
  • 返回 answer

示例

讓我們看看以下實現,以獲得更好的理解:-

 即時演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   uint32_t reverseBits(uint32_t n) {
      uint32_t ans = 0;
      for(int i = 31; i >= 0; i--){
         ans |= (n & 1) <<i;
         n>>=1;
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.reverseBits(0b00000000000000000000001001110100);
}

輸入

0b00000000000000000000001001110100

輸出

775946240

更新於:28-4-2020

5K+ 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

入門
廣告
© . All rights reserved.