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

ย้อนกลับบิตใน C ++


สมมติว่าเรามีตัวเลข x ที่ไม่ได้ลงนาม 1 ตัว และเราสามารถหาการแทนค่าเลขฐานสองของตัวเลขนั้นได้อย่างง่ายดาย (จำนวนเต็มไม่มีเครื่องหมาย 32 บิต) งานของเราคือย้อนกลับบิต ดังนั้นหากการแทนค่าไบนารีเป็นเหมือน 00000000000000000001001110100 บิตที่ย้อนกลับจะเป็น 0010111001000000000000000000000000 ดังนั้นเราต้องส่งคืนตัวเลขจริงหลังจากย้อนกลับบิต

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

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

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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