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

C++の交互ビットを使用した2進数


正の整数があるとすると、ビットが交互になっているかどうかを確認する必要があります。したがって、隣接する2つのビットの値は常に異なります。

したがって、入力が10のような場合、10のバイナリ表現は1010であるため、出力はTrueになります。

これを解決するには、次の手順に従います-

  • p:=n AND 1
  • n <2の場合、-
    • trueを返す
  • n:=n / 2
  • nがゼロ以外の場合、-
      を実行します。
    • c:=n AND 1
    • c XOR pが0と同じ場合、-
      • falseを返す
    • p:=c
    • n:=n / 2
  • trueを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool hasAlternatingBits(int n) {
      bool p=n&1;
      bool c;
      if(n<2)
         return true;
      n>>=1;
      while(n){
         c=n&1;
         if(c^p==0)
            return false;
         p=c;
         n>>=1;
      }
      return true;
   }
};
main(){
   Solution ob;
   cout << (ob.hasAlternatingBits(10));
}

入力

10

出力

1

  1. C++での特定の数値のバイナリ表現

    2進数 は、0と1の2桁のみで構成される数値です。たとえば、01010111。 特定の数値を2進数で表すにはさまざまな方法があります。 再帰的方法 このメソッドは、再帰を使用して2進数形式で数値を表すために使用されます。 アルゴリズム Step 1 : if number > 1. Follow step 2 and 3. Step 2 : push the number to a stand. Step 3 : call function recursively with number/2 Step 4 : pop number from stack and print remai

  2. C++でkセットビットの数を最大化するために必要な最小フリップ。

    問題の説明 2つの数値nとkが与えられた場合、結果の数値が正確にkセットビットになるようにビットを反転することにより、指定された数値を最大化するために必要な最小の反転数を見つける必要があります。入力は、k