2017-09-10 1 views
-1

Lassen Sie uns sagen, ich habe einige int x. Ich möchte nur die ersten 5 Bits von x drucken. Wie kann ich das machen? Ich habe gehört, dass ich so etwas wieWie wird eine 5-Bit/n-Bit-Nummer in C gedruckt?

printf("%d", x & 0x05); 

tun kann, die ersten fünf Bits von x zu drucken, aber dies gibt nur 0 in meiner Funktion.

+1

Um die fünf niedrigsten Bits zu erhalten, schreiben Sie 'x & ((1 << 5) - 1)'. Für die fünf höchsten Bits muss auch der Operator für die rechte Verschiebung ('>>') verwendet werden. – NPE

+1

0x05 ist nur das erste und dritte Bit. Die niedrigen 5 sind 0x1f. – Kevin

+4

Die Maske '0x05' wird nur die Bits' 0' und '2' isolieren. Um die Bits "0" bis "4" zu isolieren, verwenden Sie die Maske "0x1F" –

Antwort

0

Wenn Sie mit GCC kompilieren, Visual Studio 2015 (oder später) oder Clang, dann können Sie die 0b (binär) Präfix verwenden, so dass Sie die Bitmaske sehen können, die Sie wollen, anstatt der 0x (hexadezimal) Präfix, das ein wenig weniger intuitiv ist.

int x = 127; 
printf("%d\n", x & 0b11111000); // Prints 120 
printf("%d\n", x & 0b00011111); // Prints 31 

Diese Beispiele werden die 3 niedrigstwertigen Bits (1, 2 und 4), oder die 3 höchstwertigen Bits (64, 32 und 16) maskieren, so dass nur das andere 5.

Wenn Sie kompilieren mit einem Compiler, der nicht oben aufgeführt ist, dann können Sie immer das Makro importieren.

Wenn Sie die tatsächlichen Bits anzeigen möchten, möchten Sie möglicherweise this question sehen.

+0

0b ist eine Nicht-Standard-Erweiterung, die kürzlich unterstützt wird Versionen von gcc und clang, aber nicht allgemein von anderen Compilern –

+0

Huh. Touche @ChrisDodd. Ich nahm immer an, das war Teil des C-Standards, aber Sie sind in der Tat richtig. Ich werde aktualisieren, um das zu reflektieren. – Addison

Verwandte Themen