Petites questions basiques
- Comment déduit-on la plage -3,4E-38 à 3,4E38 pour le codage d'un nombre float :?: Parce qu'avec 8 bits pour l'exposant et 23 pour la mantisse j'arrive plutôt à 2^23E2^8 ce qui est beaucoup plus grand... :oops:
- Le code ASCII va de 0 à 127 à priori donc à quoi sert-il que le type char puisse descendre jusqu'à -128 :?:
- Je ne comprend pas l'utilité du modificateur de type signed, si on l'utilise c'est qu'on va stocker dans la variable un nombre qui tient dans la taille mémoire par défaut du type correspondant donc dans quelle situation son utilisation peut être nécessaire pour éviter un dépassement de capacité :?:
Merci.
Re: Petites questions basiques
Citation:
Envoyé par brice_(29)
- Comment déduit-on la plage -3,4E-38 à 3,4E38 pour le codage d'un nombre float :?: Parce qu'avec 8 bits pour l'exposant et 23 pour la mantisse j'arrive plutôt à 2^23E2^8 ce qui est beaucoup plus grand... :oops:
Ce sont des problèmes de codage interne des flottants. Ils peuvent varier d'une machine à l'autre. Les valeurs de l'implémentation sont définies dans <float.h>. Pour une explication détaillée du format standard des flottants (IEE 754) :
http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html
Pour jouer avec le format :
http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html
Citation:
- Le code ASCII va de 0 à 127 à priori donc à quoi sert-il que le type char puisse descendre jusqu'à -128 :?:
Il existe des caractères dont les valeurs dépassent 127. ASCII n'est qu'un charset parmi d'autres.
Il existe 3 sortes de char :
- signed char dont la plage garantie est -127..+127
- unsigned char dont la plage garantie est 0..+255
- char (ou plain char) qui est le type correspondant aux besoins du charset courant (ASCII : 0-127 -> signed char, EBCDIC : 0-255 ->unsigned char)
Citation:
- Je ne comprend pas l'utilité du modificateur de type signed,
Pour pouvoir stocker des valeurs < 0
Re: Petites questions basiques
Citation:
Envoyé par brice_(29)
- Comment déduit-on la plage -3,4E-38 à 3,4E38 pour le codage d'un nombre float :?: Parce qu'avec 8 bits pour l'exposant et 23 pour la mantisse j'arrive plutôt à 2^23E2^8 ce qui est beaucoup plus grand... :oops:
Tu y es presque. La partie décimale est après la virgule (et il y a un 1 implicite avant), donc tu remplaces ton 2^23 par 2 et l'intervalle de l'exposant va de -126 à 127 (il y a une valeur d'exposant utilisée pour les nombres "dénormaux" et une pour les infinis et les NaN), donc tu remplaces 2^256 par 2^127 et on arrive bien à 3,4E38.
Citation:
- Le code ASCII va de 0 à 127 à priori donc à quoi sert-il que le type char puisse descendre jusqu'à -128 :?:
L'ASCII n'est plus utilisé depuis longtemps mais il forme la partie commune de pas mal de codages sur 8 bits utilisés en pratique (une partie des ISO-8851-x, une partie des code pages utilisés par Windows) dont ceux utilisés pour le français.
Le type char n'est pas nécessairement signé. Si on est en EBCDIC il est obligatoire qu'il ne le soit pas. Si on utilise une des extensions de l'ASCII il peut l'être ou pas et en pratique on rencontre les deux cas suivant les architectures.
Citation:
- Je ne comprend pas l'utilité du modificateur de type signed, si on l'utilise c'est qu'on va stocker dans la variable un nombre qui tient dans la taille mémoire par défaut du type correspondant donc dans quelle situation son utilisation peut être nécessaire pour éviter un dépassement de capacité :?:
signed n'est pas redondant dans le cas des char. Pour les autres types entiers, il l'est.