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

C++でビット単位のAND数値Nのセットを出力します


この問題では、nの2進数のビットごとのANDである0からnまでのすべての数値を出力する必要があります。

概念をよりよく理解するために例を見てみましょう。

Input : N = 4.
Output : 0 4
Explanation :
   0 & 4 = 0
   1 & 4 = 0
   2 & 4 = 0
   3 & 4 = 0
   4 & 4 = 4.
Input : N = 6
Output : 0, 2, 4, 6

この問題を解決するには、ビット演算子を使用する必要があります。これらを使用して、必要なサブセットを見つけます。返される値のみを使用する別の更新関数を使用して、nから1まで逆方向に反復し、nを含むいくつかのANDの出力と操作を行います。操作はi=(i-1)&Nです。

このアイデアに基づいて、アルゴリズムを作成しましょう-

アルゴリズム

Step 1 : Loop from n to 1 using decrement operator i = (i-1) & n
Step 2 : PRINT i.
Step 3 : EXIT.

上記のアルゴリズムのプログラム実装-

#include <iostream>
using namespace std;
int main() {
   int n = 11;
   for (int i = n; i > 0; i = (i - 1) & n)
      cout << i << " ";
   cout << 0;
   return 0;
}

出力

11 10 9 8 3 2 1 0

  1. C++プログラミングのバイナリツリーの各ノードのセットビット数を出力します。

    バイナリツリーが与えられると、関数はノードに格納されているキーのバイナリ値を生成し、そのバイナリに相当するビット数(1)を返します。 例 次のようなキーを持つ二分木:10 3 211 140162100および146 キー 同等のバイナリ ビット(出力)を設定 10 1010 2 3 0011 2 211 11010011 5 140 10001100 3 162 10100010 3 100 1100100 3 146 10010010 3 ここでは、関数_

  2. C ++のビットごとのANDとは何ですか?

    ビットごとのAND演算子(&)は、第1オペランドの各ビットを第2オペランドの対応するビットと比較します。両方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0に設定されます。ビット単位の包括的AND演算子の両方のオペランドは、整数型である必要があります。たとえば、 例 #include <iostream>   using namespace std;   int main() {      unsigned short a = 0x5555;