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

C++で整数のセットビットをカウントします


整数、たとえばnumが与えられ、タスクは最初に数値の2進数を計算し、次に数値の合計セットビットを計算することです。

2進数のセットビットは1で表されます。整数値の2進数を計算するときは常に、0と1の組み合わせとして形成されます。したがって、数字1は、コンピューターの観点からはセットビットとして知られています。

入力 −int番号=50

出力 −数値の合計セットビット数は− 3

説明 −数値50の2進表現は110010であり、8桁の数値で計算すると、最初に2つの0が追加されます。したがって、数値の合計セットビットは3です。

入力 −int番号=10

出力 −数値の合計セットビット数は− 2

説明 −数値10の2進表現は00001010であり、8桁の数値で計算すると、最初に4つの0が追加されます。したがって、数値の合計セットビットは2です。

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

  • 整数型の変数に数値を入力してください

  • 変数countを宣言して、unsignedint型のセットビットの総数を格納します

  • ループFORをiから1<<7およびi>0およびiからi/2

    に開始します。
  • ループ内で、num&1 ==TRUEをチェックしてから、1を出力します。それ以外の場合は0を出力します

  • ループを開始し、数値が0になるまでビットの総数を計算します

  • ループ内で、count =count + number&1を設定し、number>> =1

    も設定します。
  • カウントを印刷する

#include<iostream>
using namespace std;
//Count total set bits in a number
unsigned int bits(unsigned int number){
   unsigned int count = 0;
   unsigned i;
   //display the total 8-bit number
   cout<<"8-bit digits of "<<number<<" is: ";
   for (i = 1 << 7; i > 0; i = i / 2){
      (number & i)? cout<<"1": cout<<"0";
   }
   //calculate the total set bits in a number
   while (number){
      count += number & 1;
      number >>= 1;
   }
   cout<<"\nCount of total set bits in a number are: "<<count;
}
int main(){
   int number = 50;
   bits(number);
   return 0;
}

出力

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

8-bit digits of 50 is: 00110010
Count of total set bits in a number are: 3

  1. Cの浮動小数点数のセットビットを数える方法は?

    この問題では、1つの浮動小数点値が与えられます。バイナリ表現で設定されたビット数を見つける必要があります。 たとえば、浮動小数点数が0.15625の場合、6つのセットビットがあります。典型的なCコンパイラは、単精度浮動小数点表現を使用していました。したがって、次のようになります。 ビット値に変換するには、数値を1つのポインター変数に取り込んでから、ポインターをchar*型データに型キャストする必要があります。次に、各バイトを1つずつ処理します。次に、各文字のセットビットをカウントできます。 例 #include <stdio.h> int char_set_bit_cou

  2. C++でセットをk個のサブセットに分割する方法の数を数えます

    与えられた2つの数字eとp。目標は、セットのe個の要素をp個のパーティション/サブセットに分割できる方法の数を数えることです。 例 入力 e=4 p=2 出力 Count of number of ways to partition a set into k subsets are: 7 説明 If elements are: a b c d then ways to divide them into 2 partitions are: (a,b,c)−(d), (a,b)−(c,d), (a,b,c)−(d), (a)−(b,c,d), (