Dupliquer possible:
[.____] puis-je utiliser un littéral binaire en C ou C++?
J'apprends C et j'ai récemment découvert que nous pouvons représenter des entiers de différentes manières, comme ça:
(En supposant que i
a une valeur "lisible par l'homme" de 512 .) Voici les représentations:
int i = 512;
int i = 01000;
int i = 0x200;
Quelque chose comme int i = 1000000000b
? C'est drôle mais malheureusement, aucun compilateur C n'accepte cette valeur.
La norme ne décrit aucun moyen de créer des "littéraux binaires". Cependant, les dernières versions de GCC et de Clang prennent en charge cette fonctionnalité à l'aide d'une syntaxe similaire à la syntaxe hexagonale, sauf que c'est b
au lieu de x
:
int foo = 0b00100101;
Comme indiqué, l'utilisation de ces littéraux binaires vous verrouille des compilateurs C et C++ de Visual Studio, vous voudrez peut-être prendre soin d'où et comment vous les utilisez.
C++ 14 (Je sais, je sais que ce n'est pas c) standardise le soutien aux littéraux binaires.
Vous ne pouvez pas faire cela dans C.
Mais vous avez dit que vous appreniez C++. En C++, vous pouvez utiliser boost_binaire jusqu'à ce que c ++ 0x qui permettront littéraux définis par l'utilisateur .
Veuillez noter cependant qu'il est très facile de devenir confortable traduire hexagonal en binaire et en arrière.
Pour un numéro binaire donné, il suffit de grouper les chiffres en groupes de quatre et d'apprendre que
0000 <-> 0
0001 <-> 1
0010 <-> 2
0011 <-> 3
0100 <-> 4
0101 <-> 5
0110 <-> 6
0111 <-> 7
1000 <-> 8
1001 <-> 9
1010 <-> A
1011 <-> B
1100 <-> C
1101 <-> D
1110 <-> E
1111 <-> F
Après quelques tentatives de faire cette traduction dans votre tête, vous deviendrez très à l'aise avec elle. (Bien sûr, vous pouvez faire la même chose avec octal, mais hexagone est encore plus compact que l'octal.)
Pour votre exemple spécifique:
1000000000 -> 10 0000 0000 -> 0010 0000 0000 -> 0x200
En C (et je crois C++), il n'y a pas de représentation binaire pour les chiffres. Cependant, pour le numéro simple que vous montrez, vous pouvez utiliser un raccourci.
int i = 1 << 9; /* binary 1 followed by 9 binary 0's */
Vous ne pouvez pas faire cela dans la norme C-the Language ne répond pas à la spécification des littéraux entier en binaire.