Une variable de type int peut contenir une valeur entre -32768 et +32767.
J'aimerai savoir ce qui se passe si la variable dépasse l'une des valeurs limites? (simple curiosité en fait...)
Merci d'avance![]()
Une variable de type int peut contenir une valeur entre -32768 et +32767.
J'aimerai savoir ce qui se passe si la variable dépasse l'une des valeurs limites? (simple curiosité en fait...)
Merci d'avance![]()
Le C garantit de -32767 à +32767.Envoyé par vinzzzz
Le comportement est indéterminé.J'aimerai savoir ce qui se passe si la variable dépasse l'une des valeurs limites?
Quel type de comportement sont identifiés d'une façon générale?
-Overflow ?
-Repassage par zéro ?
-???
Un comportement indéterminé, c'est, par définition, pas identiflable.Envoyé par hegros
Envoyé par Emmanuel Delahaye
Comment cela se fait-il qu'on arrive pas à les identifier ?
Si je prends un OS et une architecture matériel bien défini ca marche pas non plus ? je comprends pas comment ca marche en fait...comment on en arrive à la conclusion c'est indeterminé?Qu'est-ce que la couche bibliothéque C ne gére pas...
Rien ne dit que le comportement est reproductible... En tout cas, il n'est pas défini dans la norme. Tout ce qui n'est pas défini estEnvoyé par hegros
indéfini !
sur mon compilateur si je fais -32768 -1 je repasse à +32767
j'ai la faiblesse de croire que tu code pour un teklephone portable ou une vieille machine parce que le type int est codé sur 32 bit sur un PC standart ce qui porte le max à +2^31-1 et le min à -2^31... ton type INT à l'air d'être limité à 16 bit. Un short pour moi quoi.
et si tu n'as pas besoin des positifs ou des négatifs et un probleme de place utilise des
unsigned short int ... tu récuperes 1 bit significatif...
La norme ANSI assure qu'un int est codé au minimum sur 16 bits:-32768 à 32767. Là, on est certain que le code est portable. Une long est codé sur 32 bits (sur une machine 32 bits) et perso, j'utilise long lorsqu'un entier est supérieur à 32767 ou inférieur à -32768, ou unsigned si l'entier est pas signé.sur mon compilateur si je fais -32768 -1 je repasse à +32767
j'ai la faiblesse de croire que tu code pour un teklephone portable ou une vieille machine parce que le type int est codé sur 32 bit sur un PC standart ce qui porte le max à +2^31-1 et le min à -2^31... ton type INT à l'air d'être limité à 16 bit. Un short pour moi quoi.
Comme l'a dit Emmanuel, le comportement en cas de dépassement des valeurs limites. Cela dépend du compilateur, de l'OS et de la plateforme matériel. Cela dépend de la façons dont les entiers négatifs sont codé (bit de signe, complément à deux, complément à un). En tout les cas, la norme ne précise rien à ce sujet.J'aimerai savoir ce qui se passe si la variable dépasse l'une des valeurs limites?
Salutations
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
La norme ne parle pas de 'bits'[1] mais de plage minimale garantie. Pour un int elle est de -32767 à 32767 au minimum. Ca peut faire plus, mais ça dépend de l'implémentation.Envoyé par mujigka
Notamment de la façon dont sont codés les nombres signés. Avec la méthode "complément à deux", et si on a 16 bits, on peut faire -32768 à 32767
-------------
[1] sauf pour char. Un char doit faire 8 bits au minimum. La valeur de l'implémentation est CHAR_BIT de <limits.h>
Comment fait on pour compter le nombre d'octets dans un flux d'une manière portable ?Envoyé par Emmanuel Delahaye
On compte les char. Dans un flux, les données sont organisées par blocs de 8 bits. Ca n'a rien à voir avec la taille réelle d'un char qui peut en faire 8,9,16,32,36... Les 8 bits qui nous interesse sont toujours les bits de droite (7-0)Envoyé par ciol2.6.12
Par contre, le fait que la taille minimale d'un char soit 8 n'est certainement pas étrangère au fait que les données d'un flux fassent 8 bits (c'est à dire des octets)...
Partager