2

UINT64 変数があります。最初は 0xF に初期化されます。ここで、入力に応じて実行時にこれを変更したいと考えています。その値は実行時に増加します。しかし、私が望むのは、F から FF に、FF から FFF に変更し、F を 1 つ追加することです。

ここに私のコードがあります。

UINT64 mapFileSize = 0xF;
while (mapFileSize < someUserInput)
    // add one F to mapFileSize;

そこに何を書けばいいのだろう。左シフト演算子を試していますが、うまくいきません。

mapFileSize <<= 1;

私はこれをやっていますが、これは私に望ましい結果をもたらしません。

4

4 に答える 4

5

左シフト mapFileSize 4 ビット

次に、または 0xF の mapFileSize

 mapFileSize = mapFileSize  <<4;
 mapFileSize = mapFileSize  | 0xF;
于 2012-11-27T09:13:28.687 に答える
4

あなたが説明しているのは、単一のシフトの結果ではありません。A<<はビットをシフトし、必要に応じてゼロをシフトするだけですが、1 をシフトする必要がありますが、これは C の左シフト演算子では実行されません。

最初にシフトしてから、最下位 4 ビットをすべて 1 に設定する必要があります。

mapFileSize <<= 4;  /* Shift to the left one hexadecimal digit. */
mapFileSize |= 0xf; /* Make sure rightmost digit is f. */
于 2012-11-27T09:13:47.007 に答える
3

それを行うより簡潔な方法:

mapFileSize |= (mapFileSize << 4);

または、元の値が常に 0xf で終わることを保証できない場合:

mapFileSize = (mapFileSize << 4) | 0x0f;
于 2012-11-27T09:14:55.010 に答える
1

左に 4 シフトされた $F$ は、$FF$ ではなく、$0F0$ です。したがって、次のものが必要です。

mapFileSize <<= 4 ;
mapFileSize += 0x0F ;
于 2012-11-27T09:13:25.943 に答える