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

C++で指定されたNに1を加算した後に変更されたビット数をカウントします


数値、たとえばnumが与えられ、タスクは、数値に1が加算されたときに変更されたビットの総数を計算することです。

数値の2進表現は、指定された数値を0と1の形式に変換することによって行われ、さまざまな方法で行われます。 1つの方法では、指定された数値のLCMを2で計算し、リマインダーが0以外の場合、ビットは1に設定され、それ以外の場合は0に設定されます。

ビットの加算テーブルは

0 + 1 = 1
1 + 0 = 1
0 + 0 = 0
1 + 1 = 1 ( 1 bit carry)

Input − num = 10
Output − count is : 1

説明 − 10のバイナリ表現は1010であり、それに1を追加すると、表現は1011になります。明らかに1ビットのみが変更されたため、カウントは1です。

Input − num = 5
Output − count is : 2

説明 − 5のバイナリ表現は101であり、それに1を追加すると、表現は110になります。明らかに2ビットが変更されたため、カウントは2です

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数型の数を入力します。たとえば、int num

  • カウントを格納する変数を宣言します。たとえば、int count

  • 別の変数を考えてみましょう。たとえば、numのXORを計算し、それをn ^(n + 1)に設定するtempとします

  • count変数で__builtin_popcount(temp)を呼び出します。この関数は、指定された整数の2進表現の数値の数を計算するためのものです。これはGCCコンパイラの組み込み関数です。

  • カウントを返す

  • 結果を印刷します。

#include <iostream>
using namespace std;
// Function to find number of changed bit
int changedbit(int n){
   int XOR = n ^ (n + 1);
   // Count set bits in xor value
   int count = __builtin_popcount(XOR);
   return count;
}
int main(){
   int n = 10;
   cout <<"count is: " <<changedbit(n);
   return 0;
}

出力

上記のコードを実行すると、次の出力が得られます-

count is: 1

  1. C++で指定された数値のセットビットを使用した最小数

    問題の説明 符号なしの数が与えられた場合、与えられた符号なしの数のビットを使用して形成できる最小の数を見つけます。 例 input =10の場合、答えは3になります 10の2進表現は1010で、2セットビットの最小数は0011、つまり3 アルゴリズム 1. Count the number of set bits. 2. (Number of set bits) ^ 2 – 1 represents the minimized number) 例 #include <bits/stdc++.h> using namespace std; int getSetBi

  2. C++で設定されたビット数に従って配列をソートします

    ここでは、セットビットに基づいて配列をソートするための1つの興味深い問題があります。配列内の要素のセットビット数が多い場合、それはセットビット数の少ない別の要素の前に配置されます。いくつかの数が12、15、7であると仮定します。したがって、設定されたビットは、基本的に2進表現の1の数です。これらは、1100(12)、1111(15)、および0111(7)です。したがって、並べ替えると次のようになります- 1111, 0111, 1100 (15, 7, 12) ここでは、最初にセットビットの数を見つける必要があります。次に、C++STLソート関数を使用してそれらをソートします。セットビット数