用 C++ 編寫一個高效的 C 程式來反轉一個數字的位
在這個問題中,我們得到一個無符號整數 n。我們的任務是建立一個程式,返回透過反轉該數字所有位而生成的數字。
我們舉一個例子來理解這個問題,
輸入
n = 1
輸出
2147483648
解釋
binary of 1 is 000...0001, the reverse is 100...0000.
為了解決這個問題,我們的簡單解決方案將使用一個簡單的公式。我們將迴圈遍歷該數字的二進位制。並且找到該數字中設定的位的位置,假設是 i。將使用以下公式計算結果:((total_number_of_bits) - 1) - i
程式顯示該演算法的實現,
示例
#include<iostream>
using namespace std;
unsigned int reverseBitNumber(unsigned int num) {
unsigned int totalNumberOfBits = sizeof(num) * 8;
unsigned int reverseNumber = 0, temp;
for (int i = 0; i < totalNumberOfBits; i++){
if((num & (1 << i)))
reverseNumber |= (1 << ((totalNumberOfBits - 1) - i));
}
return reverseNumber;
}
int main() {
unsigned int n = 21;
cout<<"The number is "<<n<<endl;
cout<<"The number which has reverse bits of the number is :"<<reverseBitNumber(n);
return 0;
}輸出
The number is 2 The number which has reverse bits of the number is :2818572288
方法 2
另一種方法是使用移位,我們將移位該數字的位,直到它變為零,然後將其移位回反向數字,然後將位移回剩餘次數以獲得結果。
程式顯示我們解決方案的實現,
示例
#include<iostream>
using namespace std;
unsigned int reverseBitNumber(unsigned int n){
unsigned int rem_shift = sizeof(n) * 8 - 1;
unsigned int reverseNubmer = n;
n >>= 1;
while(n){
reverseNubmer <<= 1;
reverseNubmer |= n & 1;
n >>= 1;
rem_shift--;
}
reverseNubmer <<= rem_shift;
return reverseNubmer;
}
int main(){
unsigned int n = 21;
cout<<"The number is "<<n<<endl;
cout<<"The number which has reverse bits of the number is :"<<reverseBitNumber(n);
return 0;
}輸出
The number is 21 The number which has reverse bits of the number is :2818572288
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP