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 ...
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 ?
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 ...
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
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 : y a pas de minimum |
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.