Bonjour,
Je voudrais savoir s'il y a un moyen simple de convertir un int en un nombre de 16bits en C++...
Merci d'avance !
Bonjour,
Je voudrais savoir s'il y a un moyen simple de convertir un int en un nombre de 16bits en C++...
Merci d'avance !
Même si les types de bases ont une taille connue, celle-ci peut dépendre de la plateforme, donc il y a aussi des entier avec une taille connue, genre uint16_t pour un entier non signé 16 bits (Je met pas ma main au feu que ce soit standard)
D'après google ca se trouve dans le header cstdint
Il te suffit alors de caster vers ces types (Attention aux over/under flow)
Si tu veux coder en entier sur 16bits (ou n'importe qu'elle autre encodage), tu peux faire ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 struct int_16 { int a : 16; };
Étonnant de ne pas pouvoir définir un int sur 17 bits car en moyenne (architecture 32-64 bits), un int c'est 4 octets soit 32 bits (plutôt défini comme une plage, mais c'est pour faire court), qu'on ne puisse pas définir un int sur 64 bits me semblerait logique mais pour toutes valeurs inférieurs à 32, cela me semble étonnant, sinon je n'ai pas trouvé d'articles la-dessus dans le standard, aurait-tu un lien ?
La Norme C, 5.2.4.2.1 Sizes of integer types <limits.h> (page 27) :
Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
- minimum value for an object of type int
INT_MIN -32767 // -(2^15-1)
- maximum value for an object of type int
INT_MAX +32767 // 2^15-1
Ok merci du lien, cependant un doute persiste encore, comment se fait-il qu'un int soit défini comme étant égal à 2^15 - 1, c'est-à-dire comme un short codé sur 2 octets plutôt que 4.
De plus si on on regarde ici :
http://www.cplusplus.com/reference/l...umeric_limits/
Dans l'exemple on a ceci :
Soit 2^31 - 1Maximum value for int: 2147483647
Problème sur le site cplusplus.com ?
Ok, bon à savoir.
Donc on est d'accord, sur le fait qu'on puisse écrire un int sur 17 bits, sur une architecture 32/64 bits indiquant qu'un int a une taille de 4 octets ?
En tout cas sous Visual et GCC c'est le cas, et il me sort un warning si je mets une valeur supérieur à la taille d'un int codé sur 32 bits.
Partager