0

次のテキストは、私がドキュメントの一部にこだわっているものです。

char配列の最初の最下位3ビットは、それがであるAか。であるかを示しますB。3ビットが0x2の場合、配列はA フォーマットになります。3ビットが0x3の場合、配列はBフォーマットになります。

これは私の人生で初めて、この最下位ビットに触れたことがあります。StackOverflowで検索した後、これは私がしたことです:

int lsb = first & 3;
if (lsb == 0x02)
{
    // A
}
else if (lsb == 0x03)
{
    // B
}

これは正しいです?先に進む前に、これが正しい方法であることを確認したいと思います(そして、後で足を吹き飛ばさないようにします)。

4

4 に答える 4

4

の最下位3ビットは、使用するものとは異なり、x使用して取得されます。実際には、の最下位2ビットを取ります。x&7first & 3first & 3first

これがなぜそうなのかを理解するには、数値を2進数に変換する必要があります。2進数の3は、、117は111です。

于 2013-02-03T11:58:27.010 に答える
2

通常、最下位3ビットはyourchar&0x07ではありません。

7は1+2 + 4またはバイナリ111であり、3LSBに対応するためです。

編集:グリル、削除する必要があります。ごめん。

于 2013-02-03T12:01:04.697 に答える
1

必要な変数は、すべてのビットがゼロで、LSB1が3つあり0111ます。

0111は、変数をマスクする0x7ために使用します。variable & 0x7

詳細については、Googleビットマスキングを参照してください。

于 2013-02-03T11:59:39.310 に答える
0
d3 = b11 = b01 | b10

いいえ、現在は2つのLSBのみを比較しています。b111だろうd7

取るビット数を書き留めたい場合は、次のように書き留める必要があります。

unsigned int ls3b = ~(UINT_MAX << 3);

これは、すべて1ビットの配列を取得し、それを3ビット左にシフトして(3 LSBを0のままにして)、反転します。

于 2013-02-03T12:04:44.027 に答える