どのようなCreateMask機能のBitVector32か?
質問
どのような CreateMask()
機能 BitVector32
かがですか?うになっマスクです。
もう次の行のコード。はマスクをかを設定します。
// Creates and initializes a BitVector32 with all bit flags set to FALSE.
BitVector32 myBV = new BitVector32( 0 );
// Creates masks to isolate each of the first five bit flags.
int myBit1 = BitVector32.CreateMask();
int myBit2 = BitVector32.CreateMask( myBit1 );
int myBit3 = BitVector32.CreateMask( myBit2 );
int myBit4 = BitVector32.CreateMask( myBit3 );
int myBit5 = BitVector32.CreateMask( myBit4 );
// Sets the alternating bits to TRUE.
Console.WriteLine( "Setting alternating bits to TRUE:" );
Console.WriteLine( " Initial: {0}", myBV.ToString() );
myBV[myBit1] = true;
Console.WriteLine( " myBit1 = TRUE: {0}", myBV.ToString() );
myBV[myBit3] = true;
Console.WriteLine( " myBit3 = TRUE: {0}", myBV.ToString() );
myBV[myBit5] = true;
Console.WriteLine( " myBit5 = TRUE: {0}", myBV.ToString() );
の実用化。
解決
BitVector32.CreateMask()
は、左シフト演算子(<<
)の代替です。ほとんどの場合、2が乗算されます(左シフトは循環ではないため、失う可能性があります詳細については、こちら)
BitVector32 vector = new BitVector32();
int bit1 = BitVector32.CreateMask();
int bit2 = BitVector32.CreateMask(bit1);
int bit3 = 1 << 2;
int bit5 = 1 << 4;
Console.WriteLine(vector.ToString());
vector[bit1 | bit2 | bit3 | bit5] = true;
Console.WriteLine(vector.ToString());
出力:
BitVector32 {00000000000000000000000000000000} BitVector32 {00000000000000000000000000010111}
他のヒント
興味深いビットを簡単に取得するために使用できるマスクを返します。
ウィキペディアをチェックして、マスクを確認してください。
要するに:マスクは、関心のあるビットの場合は1、その他の場合は0の配列の形式のパターンです。
01010のようなものがあり、最後の3ビットを取得したい場合、マスクは00111のようになります。その後、01010と00111でビット単位のANDを実行すると、最後の3ビット(00010)が取得されます。 ANDは両方のビットが設定されている場合にのみ1であり、最初の3つ以外のビットはマスクに設定されていないためです。
例の方が理解しやすい場合があります:
BitVector32.CreateMask() => 1 (binary 1)
BitVector32.CreateMask(1) => 2 (binary 10)
BitVector32.CreateMask(2) => 4 (binary 100)
BitVector32.CreateMask(4) => 8 (binary 1000)
CreateMask(int)
は、指定された数値に2を掛けた値を返します。
注:最初のビットは最下位ビット、つまり最も右側のビットです。
この他の投稿リンクテキスト。 また、CreateMaskは、指定された数値に2を掛けた値を返しません。 CreateMaskは、32ビットワード(渡されるパラメーター)の特定の位置に基づいてビットマスクを作成します。これは通常、1ビット(フラグ)について話している場合はx ^ 2です。
まずこの問いか CreateMask
います。なかったのを感じる電流応答かという答えだった。その後の読みを試みたいと思いシェア私の知見:
基本的には何Maksymilianんalmast修正:"BitVector32.CreateMaskは置換のシフト演算子(<<る場合の結果で増殖による2です。
ので << はバイナリーオペレーターとCreateMask間は一つの引数を与えたいと思いることができたことを付記する。 BitVector32.CreateMask(x)
はequivalantる x << 1
.
Bordercases
しかし、 BitVector32.CreateMask(x)
なequivalantる x << 1
二ボーダーの場合:
BitVector32.CreateMask(int.MinValue)
:
るInvalidOperationExceptionスローされます。int.MinValue
に対応する10000000000000000000000000000000
.このよう少しおかしい。その他の値を1として一番左のビット(負の数を作成します。にコントラストint.MinValue << 1
ない例外がスローされば0を返す.をご利用いただきます
BitVector32.CreateMask(0)
(BitVector32.CreateMask()
).を返します1
(00000000000000000000000000000000
となり00000000000000000000000000000001
),
は0 << 1というだけでは0を返す.
増殖による2
CreateMaskほとんどいつもは相当の増殖による2.その他の特段の事情がある場合 によっても異なるが、第二のスタイルの左からの左端のビット.Intに署名するので、左端ビットを示します。このシナリオにおいて、符号反転させ.E.g. CreateMask(-1)
( 11111111111111111111111111111111
結-2(または 11111111111111111111111111111110
が、 CreateMask(int.MaxValue)
( 01111111111111111111111111111111
でも結果-2.
とにかくから使用します。んだを使用する場合BitVector32するだけで考えると配列の32ビット.これintと組み合わせBitVector32うだけなので便利です。
時にはCreateMask。
かは知らない。からだそうで 文書 の名前の"引数の機能をその目的に使用されているかのようなシーケンス"利用CreateMask()の最初のマスクシリーズとCreateMask(int)後続のすべてのマスクを商品化しました。".
しかし、コード例では、その使用を作成するマスクの最初の5ビットの、その後いくつかの事業者ます。私は想像できない期待は大き32話を続けるCreateMaskすることによって引き起こっとビット近くのります。