Computer >> Máy Tính >  >> Lập trình >> C ++

Viết một chương trình C hiệu quả để đảo ngược bit của một số trong C ++

Trong bài toán này, chúng ta được cung cấp một số nguyên n không dấu. Nhiệm vụ của chúng ta là tạo một chương trình trả về số được tạo bằng cách đảo ngược tất cả các bit của số.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

n = 1

Đầu ra

2147483648

Giải thích

binary of 1 is 000...0001, the reverse is 100...0000.

Để giải quyết vấn đề này, chúng tôi giải pháp đơn giản sẽ là sử dụng một công thức đơn giản. Chúng tôi sẽ lặp qua nhị phân của số. Và tìm vị trí của bit thiết lập trong số cho phép nói nó i. Kết quả sẽ được tính bằng công thức, ((total_number_of_bits) - 1) - i

Chương trình hiển thị việc triển khai thuật toán này,

Ví dụ

#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;
}

Đầu ra

The number is 2
The number which has reverse bits of the number is :2818572288

Phương pháp 2

Một phương pháp khác là sử dụng dịch chuyển, chúng tôi sẽ dịch chuyển các bit của số cho đến khi nó trở thành 0 và dịch chúng theo số ngược lại và sau đó dịch chuyển các bit còn lại theo số lần để nhận được kết quả.

Chương trình cho thấy việc triển khai giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra

The number is 21
The number which has reverse bits of the number is :2818572288