Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การกลับบิตใน C++

สมมติว่าเรามีจำนวนไม่มีเครื่องหมาย x และเราสามารถหาการแทนค่าทศนิยมสอง (32-bit unsigned integer) ได้ง่ายๆ ภารกิจของเราคือกลับบิต เช่นถ้าการแทนค่าทศนิยมสองเป็น 00000000000000000000001001110100 บิตที่กลับแล้วจะเป็น 00101110010000000000000000000000 เราต้องคืนค่าตัวเลขจริงหลังจากกลับบิต

วิธีการแก้ปัญหา

  • สมมติ n คือตัวเลขที่กำหนด
  • ให้ answer := 0
  • สำหรับ i := 31 ลงถึง 0:
    • answer := answer OR (n AND 1), และเลื่อนซ้าย i ครั้ง
    • n := n หลังเลื่อนขวา 1 บิต
  • คืนค่า answer

ตัวอย่างโค้ด

#include 
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;
    }
};

int main(){
    Solution ob;
    cout << ob.reverseBits(0b00000000000000000000001001110100);
}

อินพุต

0b00000000000000000000001001110100

เอาต์พุต

775946240