สมมติว่าเรามีตัวเลข 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