valeur trop grande... forcer un type... - C++ - Programmation
Marsh Posté le 09-05-2003 à 13:37:53
V est declare en long 
en fait ca peut etre un long ou qqch de plus petit 
 
et on me renvoit 
assembler.c:892: warning: decimal constant is so large that it is unsigned 
 
 
moi je suis tout a fait d accord pour que ce soit pas signe 
Marsh Posté le 09-05-2003 à 13:40:46
| Theorie du chaos a écrit : V est declare en long  | 
 
 
Si il est en long, il est donc signé, donc forcément inférieur à ta valeur ... Si tu le mets en unsigned long, il est forcément supérieur à la valeur négative que tu donnes ...  j'ai du mal à voir le but de ton test ...
 j'ai du mal à voir le but de ton test ...
Marsh Posté le 09-05-2003 à 13:46:34
V peut etre signe ou non... 
et il me faut un test qui accepte aussi bien les longs signes que les noms signes tant que ca tient sur 32 bits
Marsh Posté le 09-05-2003 à 13:56:31
je peux declarer en int aussi
Marsh Posté le 09-05-2003 à 14:00:22
| Theorie du chaos a écrit : V peut etre signe ou non...  | 
 
  C'est pour faire une macro ?
 C'est pour faire une macro ? 
 
Dans ce cas, oublie les concepts de signé ou pas signé ... parce que sinon, tes comparaisons vont foirer à chaque fois ... 
-2147483647, c'est 0x80000001 si je ne m'abuse et 
 4294967295, c'est 0xFFFFFFFE ... 
 
Le code généré pour les comparaisons d'entiers signés est différent de celui pour les entiers non signés... 
Je ne suis pas sur que tu puisses le faire comme ca ... 
 
Marsh Posté le 09-05-2003 à 14:00:38
| Theorie du chaos a écrit : V peut etre signe ou non...  | 
 
ben t ennuye parce qu'en signe tu pourras pas aller plus loin que +2^31 soit 2147483648, bien inferieur a ton 4294967295 des familles...
Marsh Posté le 09-05-2003 à 14:04:38
V est une valeur de reservation initialisee (en assembleur) 
signe ou non... 
 
et je dois verifier que cette valeur peut etre traitee par un .long 
donc qu'elle est codable
Marsh Posté le 09-05-2003 à 14:08:50
| Theorie du chaos a écrit : V est une valeur de reservation initialisee (en assembleur)  | 
 
 
comment tu sais si elle est signée ? 
C'est pas en voyant la tête de la variable que tu vas le deviner ... 
si elle est codée sur 32bits, elle passera toujours, que ce soit dans un long ou un unsigned long ...
Marsh Posté le 09-05-2003 à 14:16:05
(unsigned long)4294967295 
 
 
  
  
 
 
4294967295UL 
 
 
le mieux c'est d'utiliser les macros de <limits.h>
Marsh Posté le 09-05-2003 à 14:31:55
autre question... si dans un prog en assembleur... 
un utilisateur saisi une valeur superieure a la valeur limite... 
que fait l'assembleur? 
erreur? 
ou il remplace la valeur par la valeur limite?
Marsh Posté le 09-05-2003 à 14:34:06
| Theorie du chaos a écrit : autre question... si dans un prog en assembleur...  | 
 
l'assembleur ne fera rien, par contre ton système, lui, va danser la carmagnole, vu que l'utilisateur écrira dans une zone de mémoire qui ne lui appartiendra pas forcément 
Marsh Posté le 09-05-2003 à 14:34:24
| theShOcKwAvE a écrit :   | 
c selon l'humeur du mec qui fait le prog en assembleur que je dois assembler 
Marsh Posté le 09-05-2003 à 14:34:45
| ++Taz a écrit : (unsigned long)4294967295  | 
deja un grand pas merci 
Marsh Posté le 09-05-2003 à 14:45:01
| Theorie du chaos a écrit : c selon l'humeur du mec qui fait le prog en assembleur que je dois assembler  | 
 
Tu fais un compilateur asm ?
Marsh Posté le 09-05-2003 à 14:50:08
ReplyMarsh Posté le 09-05-2003 à 14:53:52
| chrisbk a écrit :   | 
 
  ouais ... mais bon ... Enfin ... ouais quoi ...
 ouais ... mais bon ... Enfin ... ouais quoi ... 
Marsh Posté le 09-05-2003 à 14:54:46
| ++Taz a écrit :   | 
 
 
Il parle de ces defines la: 
 
? minimum value for an object of type short int 
SHRT_MIN -32767 // -(215^15 - 1) 
? maximum value for an object of type short int 
SHRT_MAX +32767 // 215^15 - 1 
? maximum value for an object of type unsigned short int 
USHRT_MAX 65535 // 216^16 - 1 
? minimum value for an object of type int 
INT_MIN -32767 // -(215^15 - 1) 
? maximum value for an object of type int 
INT_MAX +32767 // 215^15 - 1 
? maximum value for an object of type unsigned int 
UINT_MAX 65535 // 216^16 - 1 
? minimum value for an object of type long int 
LONG_MIN -2147483647 // -(231^31 - 1) 
? maximum value for an object of type long int 
LONG_MAX +2147483647 // 231^31 - 1 
? maximum value for an object of type unsigned long int 
ULONG_MAX 4294967295 // 232^32 - 1 
 
C'est plus clair comme ca.
Marsh Posté le 09-05-2003 à 14:54:55
| theShOcKwAvE a écrit :   | 
 
c'etait ma minute enculage de mouches ![[:ddr555] [:ddr555]](https://forum-images.hardware.fr/images/perso/ddr555.gif)
Marsh Posté le 09-05-2003 à 15:02:04
| chrisbk a écrit :   | 
 
 
en tous cas, ca change rien au fait que si c'est effectivement des chaines de caractères qu'il a en entrée, c'est au moment de la conversion vers le type voulu qu'il devra se demander si ca rentre ... Pas après !!!
Marsh Posté le 09-05-2003 à 15:04:22
| theShOcKwAvE a écrit :   | 
 
 
sachez  mon cher que sur ce point nos vues s'accordent parfaitement 
Marsh Posté le 09-05-2003 à 16:05:16
KONAR > tes valeurs csont celle de ton systèmes, moi j'ai pas les meme, on est bien d'accord sur l'avantage d'utiliser ces macro
Marsh Posté le 09-05-2003 à 16:23:29
| ++Taz a écrit : KONAR > tes valeurs csont celle de ton systèmes, moi j'ai pas les meme, on est bien d'accord sur l'avantage d'utiliser ces macro  | 
 
 
Si tu n'as pasd les mêmes c'est que t'as une archi 64 bits (ou 16). Sinon je vois pas pkoi. 
Ce sont les valuers definies dans le standard clause  
"5.2.4.2.1 Sizes of integer types <limits.h>" 
[...]Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign. 
Donc tu as au moins ca.
Marsh Posté le 09-05-2003 à 16:37:03
| ++Taz a écrit :   | 
 
 
C'est pas une phrase que j'ai sorti de mon cul. 
Elle vient du standard C (ISO/IEC 9899:1999(E), Second edition 
1999-12-01). 
 
Donc a moins ke tu aies une archi autre que 32 bits, ce sont les bonnes valeurs.
Marsh Posté le 09-05-2003 à 16:39:28
je sais j'ai la meme, seulement t'as une petite lacune en anglais shall be 
 
moi perso j'ai 
 
 
#define INT_MAX  2147483647 
#define INT_MIN  (-INT_MAX-1) 
 
mais j'ai déjà travaillé en 16 bits ou travailler avec des gens sur des archis à char sur 7bits, etc
Marsh Posté le 09-05-2003 à 16:49:16
| ++Taz a écrit : je sais j'ai la meme, seulement t'as une petite lacune en anglais shall be  | 
 
 
Alors plusieurs choses... 
Je ne pense pas justement présenter de lacune. 
Je me cite: 
| Citation :   | 
 
Et pour le "shall": 
toujours le standard, clause 4.1 
| Citation :   | 
 
Donc c'est pas "shall" dans le sens "ca serait bien de", c'est "shall" dans le sens "il faut, sinon tu rates" 
 
Alors ta valeur ("#define INT_MAX 2147483647" ) est correcte vu kelle est superieur au minimum requis. 
 
Et ca ne sert a rien de t'enerver avec tes archis 16 bits ou tes chars de 7 bits. Ces archis la sont comme les autres et doivent respecter le norme (sur une archi 16 bits mes valeurs sont kan meme bonnes)
Marsh Posté le 09-05-2003 à 16:51:58
je m'énerves po... enfin bref, fo utiliser les valeurs de limits.h et pas autre chose (c'est d'ailleurs plus lsibles que des 32 ou 16 magiques). et autant pour moi, la norme ANSI fixe les minima... mais fo pas negliger que pas mal d'archi ne supporte pas cette norme (dans l'indstrie justement)
Marsh Posté le 09-05-2003 à 17:49:30
merci beaucoup 
Marsh Posté le 09-05-2003 à 13:34:16
if ((V <= (unsigned long)4294967295) &&
(V > -2147483647))
probleme avec la ere comparaison
---------------
Les accents sont en option... j'ai un clavier qwertz.