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

C ++の範囲のビット単位および(または&)


この問題では、2つの整数値aとbが与えられます。そして、私たちのタスクは、 aからbまでの範囲のビット単位および(&)を見つけることです。 。これは、a&a + 1&a + 2&…b-1&bの値を見つける必要があることを意味します。

問題を理解するために例を見てみましょう

入力 − a =3、b =8

出力 − 0

説明 3&4&5&6&7&8 =0

この問題を解決するための簡単な解決策は、aから始めて、1をbに増やすことにより、ビット単位ですべての数値を見つけることです。

より効果的なソリューション

これはより効果的な解決策です。これは-

を使用して実行できます。

ステップ1 −bのLSBを反転します。

ステップ2 −数値をaおよびbと比較し、範囲内にあるかどうかを確認します。

ステップ2.1 −数値がそのLSBゲインのフリップよりも大きい場合。

ステップ2.2 −それがthen number=resultより大きくない場合。

さあ、しましょう の動作中の上記のアルゴリズムを参照してください-

− a=3およびb=8。

解決策

ステップ1 − b =8(1000)、数の中で唯一のLSBを反転します。数は0000、つまり0になります

ステップ2 − 0は3未満であり、0は結果です。

それでは、問題を解決するためのコードを見てみましょう。

#include <stdio.h>
int main(){
   long a, b;
   a = 3; b = 8;
   do{
      b -= (b & -b);
   }while(a < b);
   printf("%li", b);
}

出力

0

  1. Cで割り切れる最大の正の整数であり、C ++では[A、B]の範囲にあります

    ここで、1つの興味深い問題が発生します。 3つの整数A、B、およびCがあると考えてみましょう。XmodC =0であり、Xが[A、B]の範囲にないように、1つの最小整数Xを見つける必要があります。 A、B、Cの値がそれぞれ5、10、4の場合、Xの値は4になります。解を得るには、次の手順に従う必要があります- 手順- Cが[A、B]の範囲にない場合は、結果としてCを返します それ以外の場合は、Bより大きいCの最初の倍数を取得し、その値を返します 例 #include <iostream> using namespace std; int findMinMumber(

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

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