C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で数値のビットを反転する効率的なCプログラムを作成する


この問題では、符号なし整数nが与えられます。私たちのタスクは、数値のすべてのビットを逆にすることによって生成された数値を返すプログラムを作成することです。

問題を理解するために例を見てみましょう

入力

n = 1

出力

2147483648

説明

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

この問題を解決するための簡単な解決策は、簡単な式を使用することです。数値の2進数をループします。そして、数の中で設定されたビットの位置を見つけて、それを言うことができます。結果は、式((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

もう1つの方法は、シフトを使用することです。ゼロになるまで数値のビットをシフトし、逆の数値にシフトしてから、残りのビットをシフトして結果を取得します。

ソリューションの実装を示すプログラム

#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

  1. 配列を逆にするCプログラムを書く

    配列は、共通の名前で保存される関連アイテムのグループです。 構文 配列を宣言するための構文は次のとおりです- datatype array_name [size]; 初期化 配列は宣言時に初期化することもできます- int a[5] = { 10,20,30,40,50}; Cの逆配列 スワッピング手法を使用して配列を逆にすることができます。 たとえば、「P」が4つの要素を持つ整数の配列である場合- P[0] = 1, P[1] = 2, P[2] = 3 and P[3]=4 次に、反転した後- P[0] = 4, P[1] = 3, P[2] = 2 and P[3]=1

  2. 数値の合計ビットをカウントするPythonプログラムを作成しますか?

    最初に数値を入力し、bin()関数を使用してこの数値をバイナリに変換し、次に出力文字列の最初の2文字「0b」を削除し、次にバイナリ文字列の長さを計算します。 例 Input:200 Output:8 説明 Binary representation of 200 is 10010000 アルゴリズム Step 1: input number. Step 2: convert number into its binary using bin() function. Step 3: remove first two characters ‘0b’ of output binary st