2017-09-10 6 views
-1

Disons que j'ai un int x. Je veux seulement imprimer les 5 premiers bits de x. Comment puis-je faire ceci? Je l'ai entendu dire que je peux faire quelque chose commeComment imprimer un numéro de bit de 5 bits/n en C?

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

pour imprimer les cinq premiers bits de x mais juste sorties 0 dans ma fonction.

+1

Pour obtenir les cinq bits les plus bas, écrivez 'x & ((1 << 5) - 1)'. Pour les cinq bits les plus élevés, vous devez également utiliser l'opérateur de décalage vers la droite ('>>'). – NPE

+1

0x05 est juste le premier et le troisième bits. Les 5 bas sont 0x1f. – Kevin

+4

Le masque '0x05' isolera seulement les bits' 0' et '2'. Pour isoler les bits '0' à' 4', utilisez le masque '0x1F' –

Répondre

0

Si vous compilez avec GCC, Visual Studio 2015 (ou version ultérieure), ou Clang, vous pouvez alors utiliser le préfixe 0b (binaire), de sorte que vous pouvez voir le masque de bits que vous voulez, au lieu de la 0x (hexadécimal) préfixe, ce qui est un peu moins intuitif.

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

Ces exemples masquer les 3 bits les moins significatifs (1, 2 et 4), ou les 3 bits les plus significatifs (64, 32 et 16), ne laissant que l'autre 5.

Si vous compilez avec un compilateur non répertorié ci-dessus, vous pouvez toujours importer la macro BOOST_BINARY. Si vous voulez voir les bits réels, alors vous pourriez vouloir voir this question.

+0

0b est une extension non-standard supportée par les récents versions de gcc et clang, mais pas généralement par d'autres compilateurs –

+0

Huh. Touche @ChrisDodd J'ai toujours supposé que cela faisait partie de la norme C, mais vous avez raison, je vais mettre à jour pour refléter cela. – Addison