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