entier a valeur maximum. (RESOLU)

entier a valeur maximum. (RESOLU) - C - Programmation

Marsh Posté le 16-02-2010 à 04:41:37    

Bonjour,
 
Je me pose une petite question de débutant que je suis :
 
qu'arrive-t-il à un entier (non signé) qui est à sa valeur maximum (OxFFFFFFFF pas exemple pour un entier de 4 octet) et qu'on l'incrémente à nouveau ?
 
Reviens-t-il à zero ? (ça m'arrangerais  :D )  
 
Sinon, comment connaitre la valeur max q'un entier peut prendre ? A part faire sizeof(int) * 256 je vois pas.
 
Merci d'avance!

Message cité 1 fois
Message édité par deuxbagettes le 17-02-2010 à 02:14:57
Reply

Marsh Posté le 16-02-2010 à 04:41:37   

Reply

Marsh Posté le 16-02-2010 à 08:43:49    

MAX_INT est définie comme etant le plus grand entier disponible.
Par definition , MAX_INT+1 renvoit 0 sur les machines classiques à representation en complément à 2.
 
Classiquement, sur ces memes machines
unsigned x = ~0;
renvoit le bon pattern de bit.
 
 

Reply

Marsh Posté le 16-02-2010 à 09:00:11    

deuxbagettes a écrit :

qu'arrive-t-il à un entier (non signé) qui est à sa valeur maximum (OxFFFFFFFF pas exemple pour un entier de 4 octet) et qu'on l'incrémente à nouveau ?


 
Devient 0.  Les non signes modelisent Z/nZ.
 


 
INT_MAX
 

Citation :

est définie comme etant le plus grand entier disponible.


 
Entier dans le sens int.  Il y a aussi LONG_MAX (long) SHRT_MAX, USHRT_MAX, UINT_MAX ULONG_MAX.
 

Citation :

Par definition , MAX_INT+1 renvoit 0 sur les machines classiques à representation en complément à 2.


 
Non.  -INT_MAX-1 soit INT_MIN.
 
Ensuite c'est un depassement de capacite et de plus en plus les compilateurs supposent que ca n'arrive pas (par exemple si gcc a bien une option pour permettre de dependre de ce comportement, mais elle n'est pas active par defaut), donc dependre de la valeur optenue est peu sage.
 

Citation :

Classiquement, sur ces memes machines
unsigned x = ~0;
renvoit le bon pattern de bit.


 
Pas besoin de dependre de quoi que ce soit:

Code :
  1. unsigned x = -1U;
  2. unsigned y = ~0U;


sont garntis etre UINT_MAX.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 16-02-2010 à 09:02:54    

 

Voila pourquoi je dois pas posté avant le café v_v

 
Un Programmeur a écrit :


Non.  -INT_MAX-1 soit INT_MIN.


j'ai supposé au vu des hypothèses du PO qu'il travailler en non signé. Mais mea culpa, INT_MIN oui

 
Un Programmeur a écrit :


Ensuite c'est un depassement de capacite et de plus en plus les compilateurs supposent que ca n'arrive pas (par exemple si gcc a bien une option pour permettre de dependre de ce comportement, mais elle n'est pas active par defaut), donc dependre de la valeur optenue est peu sage.


clairement

Message cité 2 fois
Message édité par Joel F le 16-02-2010 à 09:03:14
Reply

Marsh Posté le 16-02-2010 à 09:06:21    

Joel F a écrit :

Voila pourquoi je dois pas posté avant le café v_v


 
Personne ne devrait. (Et puis c'est quelque chose ou je me plante une fois sur deux; uniquement pour INT_MAX d'ailleurs, c'est au point ou je me demande s'il n'y avait pas un MAX_INT non standard pour l'implementation avec laquelle j'ai commence sur le C)


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 16-02-2010 à 11:46:08    

Un Programmeur a écrit :


Personne ne devrait. (Et puis c'est quelque chose ou je me plante une fois sur deux; uniquement pour INT_MAX d'ailleurs, c'est au point ou je me demande s'il n'y avait pas un MAX_INT non standard pour l'implementation avec laquelle j'ai commence sur le C)


 
Le truc c'ets que ca m'ai venu comme un réflexe, donc je me demande si tu n'as pas raison sur le truc antédiluvien non standard

Reply

Marsh Posté le 16-02-2010 à 20:47:28    

Bon les normands... Pas tout capté.  
 
 

Joel F a écrit :


j'ai supposé au vu des hypothèses du PO qu'il travailler en non signé. Mais mea culpa, INT_MIN oui
 


 
Oui j'ai précisé dans le premier message que je travaillais avec un int non signé (et ça veux dire quoi PO à la fin ? Ca deux fois qu'on m'appelle comme ça ici, je voudrais bien savoir  :jap: ).
 
J'ai cru comprendre qu'il ne valais mieux pas que je compte sur mon zéro une fois la limite dépassée ? Ou bien ?  :pt1cable:

Reply

Marsh Posté le 16-02-2010 à 22:02:48    

deuxbagettes a écrit :

(et ça veux dire quoi PO à la fin ? Ca deux fois qu'on m'appelle comme ça ici, je voudrais bien savoir  :jap: ).


Posteur Originel => le créateur du topic
 

deuxbagettes a écrit :

J'ai cru comprendre qu'il ne valais mieux pas que je compte sur mon zéro une fois la limite dépassée ? Ou bien ?  :pt1cable:


Sisi. 0xFFFFFFFF + 1 = 0x0001 0000 0000
Comme seuls les 4 derniers octets seront stockés dans ta variable...
 
Pour faire simple, faut voir ta variable comme une horloge. Quand elle atteint sa valeur max et qu'on lui ajoute 1, elle repasse à 0.
Et si ta variable est signée, alors elle va de 0 à MAX / 2 - 1 puis si on lui ajoute 1 passe à -MAX / 2 et ensuite revient sur 0.


Message édité par Sve@r le 16-02-2010 à 22:04:01

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-02-2010 à 02:14:35    

Meeeerci beaucoup ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed