Giả sử chúng ta có một số không dấu x, và chúng ta có thể dễ dàng tìm thấy biểu diễn nhị phân của nó (số nguyên không dấu 32 bit). Nhiệm vụ của chúng ta là đảo ngược các bit. Vì vậy, nếu biểu diễn nhị phân là 00000000000000000000001001110100, thì các bit đảo ngược sẽ là 0010111001000000000000000000000000. Vì vậy, chúng ta phải trả lại số thực sau khi đảo ngược các bit
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Giả sử n là số đã cho
- để trả lời:=0
- for i:=31 xuống 0:
- answer:=answer OR (n VÀ i), và chuyển nó sang trái tôi lần
- n:=n sau khi dịch sang phải 1 bit
- trả lời câu trả lời
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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); }
Đầu vào
0b00000000000000000000001001110100
Đầu ra
775946240