14

このコード:

BitArray bits = new BitArray(new byte[] { 7 });
foreach (bool bit in bits)
{
    Console.WriteLine(bit ? 1 : 0);
}

次の出力が得られます。

11100000

逆にすべきではありませんか?このような:

00000111

これらの用語はバイトの位置のみを指しますが、エンディアンはほとんどなく、大きいことを認識しています。私の知る限り、それらはビットに影響を与えません。

4

3 に答える 3

12

BitArrayのドキュメントには次のように記載されています。

配列の最初のバイトはビット 0 ~ 7 を表し、2 番目のバイトはビット 8 ~ 15 を表し、以下同様です。各バイトの最下位ビットは、最も低いインデックス値を表します。「バイト [0] & 1」はビット 0 を表し、「バイト [0] & 2」はビット 1 を表し、「バイト [0] & 4」はビット 2 を表し、すぐ。

ビットにインデックスを付けるときは、最下位から開始するのが慣習です。これは、2 進表記で記述した場合の右側です。ただし、配列を列挙するときはインデックス 0 から開始するため、右から左ではなく左から右に出力されます。後ろ向きに見えるのはそのためです。

たとえば、単語 01011010 00101101 (90 45) は次のようにインデックス付けされます。

 0  1  0  1  1  0  1  0  -  0  0  1  0  1  1  0  1
-----------------------    -----------------------
15 14 13 12 11 10  9  8     7  6  5  4  3  2  1  0

そして、new byte[] { 45, 90 }最初に重要度の低いものを渡すので、それをコンストラクターに渡します。印刷すると、インデックス順に次のように表示されます1011010001011010。これは、元のバイナリ表記の逆です。

于 2012-01-30T16:10:02.537 に答える
2

ドキュメントはそれについて明示的ではありませんが、反復子は LSB から MSB に反復すると思います。あなたがビットを印刷していない限り、私には(個人的には!)合理的に聞こえます。BitArray.GetEnumerator Methodを見ました。

于 2012-01-30T16:09:41.993 に答える
2

いいえ、ビット配列であり、ビットとして表される数値ではありません。

これは、ビット操作用にいくつかのメソッドが追加された通常の配列と同じです。int の配列がある場合と同様です。逆の順序であるとは思わないでしょう。位置ごとに取得するだけです。

例えば:

に変換された数値 (バイト単位)は次のBitArrayようになります。

2 = 01000000
5 = 10100000
8 = 00010000

値の位置を格納するだけで、バイナリ数値を除いて相対的なものではありません。

使用しているコンストラクターを説明するリンクは次のとおりです。

http://msdn.microsoft.com/en-us/library/b3d1dwck.aspx

重要なポイントは次のとおりです。

最初の値の配列要素の数値はビット 0 ~ 31 を表し、配列の 2 番目の数値はビット 32 ~ 63 を表し、以下同様です。各整数の最下位ビットは、最小のインデックス値を表します。「値 [0] & 1」はビット 0 を表し、「値 [0] & 2」はビット 1 を表し、「値 [0] & 4」はビット 2 を表し、すぐ。

于 2012-01-30T16:10:06.547 に答える