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

C++で数値に同じ数の設定ビットと未設定ビットがあるかどうかを確認します


このセクションでは、数値の設定ビット数と未設定ビット数が同じであるかどうかを確認します。番号12がそこにあると仮定します。そのバイナリ表現は1100です。これは0と1の数が同じです。

アプローチは簡単です。数値の各ビットをチェックし、それが1の場合は、set_bit_countを増やし、0の場合は、unset_bit_countを増やします。最後に、それらが同じである場合はtrueを返し、そうでない場合はfalseを返します。

#include <iostream>
using namespace std;
bool hasSameSetUnset(int n) {
   int set_count = 0, unset_count = 0;
   while(n){
      if((n & 1) == 1){
         set_count++;
      }else{
         unset_count++;
      }
      n = n >> 1; //shift to right
   }
   if(set_count == unset_count)
   return true;
   return false;
}
int main() {
   int num = 35; //100011
   if(hasSameSetUnset(num)){
      cout << "Has same set, unset bits";
   }else{
      cout << "Not same number of set, unset bits";
   }
}

出力

Has same set, unset bits

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

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

  2. Pythonで数値に最初と最後のビットのみが設定されているかどうかを確認します

    数nがあるとします。数値の最初と最後の位置に2つのセットビットしかないかどうかを確認する必要があります。 したがって、入力がn =17の場合、nのバイナリ表現は10001であるため、出力はTrueになります。最初と最後の位置には2つの1しかありません。 これを解決するには、次の手順に従います- nが1と同じ場合、 Trueを返す n-1が2の累乗の場合はtrueを返し、それ以外の場合はfalseを返します 理解を深めるために、次の実装を見てみましょう- サンプルコード def is_pow_of_two(n):    return (n & n-1