entier a valeur maximum. (RESOLU) - C - Programmation
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.
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.
Joel F a écrit : MAX_INT |
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 |
Pas besoin de dependre de quoi que ce soit:
Code :
|
sont garntis etre UINT_MAX.
Marsh Posté le 16-02-2010 à 09:02:54
Un Programmeur a écrit :
|
Voila pourquoi je dois pas posté avant le café v_v
Un Programmeur a écrit :
|
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 :
|
clairement
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)
Marsh Posté le 16-02-2010 à 11:46:08
Un Programmeur a écrit : |
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
Marsh Posté le 16-02-2010 à 20:47:28
Bon les normands... Pas tout capté.
Joel F a écrit : |
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 ).
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 ?
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 ). |
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 ? |
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.
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 )
Sinon, comment connaitre la valeur max q'un entier peut prendre ? A part faire sizeof(int) * 256 je vois pas.
Merci d'avance!
Message édité par deuxbagettes le 17-02-2010 à 02:14:57