web-dev-qa-db-fra.com

C représente int dans la base 2

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:

Décimal:

int i = 512; 

Octal:

int i = 01000;

Hexadécimal:

int i = 0x200;

Dans la base 2 (ou la représentation binaire) 512 est 1000000000 . Comment écrire ceci en C?

Quelque chose comme int i = 1000000000b? C'est drôle mais malheureusement, aucun compilateur C n'accepte cette valeur.

13
DevelRoot

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.

30
zneak

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
12
jason

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 */
9
pmg

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.

3
David Heffernan