valeur trop grande... forcer un type...

valeur trop grande... forcer un type... - C++ - Programmation

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.
Reply

Marsh Posté le 09-05-2003 à 13:34:16   

Reply

Marsh Posté le 09-05-2003 à 13:36:04    

V est de quel type ?


---------------
last.fm
Reply

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 :d


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

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 ... :heink: j'ai du mal à voir le but de ton test ...


---------------
last.fm
Reply

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


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 09-05-2003 à 13:56:31    

je peux declarer en int aussi


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 09-05-2003 à 14:00:22    

Theorie du chaos a écrit :

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


 
:heink: 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 ...
 


---------------
last.fm
Reply

Marsh Posté le 09-05-2003 à 14:00:38    

Theorie du chaos a écrit :

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


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...

Reply

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


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 09-05-2003 à 14:08:50    

Theorie du chaos a écrit :

V est une valeur de reservation initialisee (en assembleur)
signe ou non...


 
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 ...


---------------
last.fm
Reply

Marsh Posté le 09-05-2003 à 14:08:50   

Reply

Marsh Posté le 09-05-2003 à 14:16:05    

(unsigned long)4294967295
 
 
 :non:  
 
 
4294967295UL
 
 
le mieux c'est d'utiliser les macros de <limits.h>

Reply

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?


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 09-05-2003 à 14:34:06    

Theorie du chaos a écrit :

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?


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 :d


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 09-05-2003 à 14:34:24    

theShOcKwAvE a écrit :


 
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 ...

c selon l'humeur du mec qui fait le prog en assembleur que je dois assembler :/


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le 09-05-2003 à 14:34:45    

++Taz a écrit :

(unsigned long)4294967295
 
 
 :non:  
 
 
4294967295UL
 
 
le mieux c'est d'utiliser les macros de <limits.h>

deja un grand pas merci :)


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

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 ?


Message édité par theshockwave le 09-05-2003 à 14:45:35

---------------
last.fm
Reply

Marsh Posté le 09-05-2003 à 14:50:08    

theShOcKwAvE a écrit :


Tu fais un compilateur asm ?


 
on appelle ca un assembleur [:aloy]

Reply

Marsh Posté le 09-05-2003 à 14:53:52    

chrisbk a écrit :


 
on appelle ca un assembleur [:aloy]


 
:D ouais ... mais bon ... Enfin ... ouais quoi ... :D


---------------
last.fm
Reply

Marsh Posté le 09-05-2003 à 14:54:46    

++Taz a écrit :


le mieux c'est d'utiliser les macros de <limits.h>


 
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.

Reply

Marsh Posté le 09-05-2003 à 14:54:55    

theShOcKwAvE a écrit :


 
:D ouais ... mais bon ... Enfin ... ouais quoi ... :D


c'etait ma minute enculage de mouches [:ddr555]

Reply

Marsh Posté le 09-05-2003 à 15:02:04    

chrisbk a écrit :


c'etait ma minute enculage de mouches [:ddr555]


 
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 !!!


---------------
last.fm
Reply

Marsh Posté le 09-05-2003 à 15:04:22    

theShOcKwAvE 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 !!!


 
sachez  mon cher que sur ce point nos vues s'accordent parfaitement

Reply

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

Reply

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.

Reply

Marsh Posté le 09-05-2003 à 16:33:54    

:non: y a pas de minimum

Reply

Marsh Posté le 09-05-2003 à 16:37:03    

++Taz a écrit :

:non: 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.

Reply

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

Reply

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
 
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


 
Alors plusieurs choses...
Je ne pense pas justement présenter de lacune.
Je me cite:

Citation :


[...]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.


Et pour le "shall":
toujours le standard, clause 4.1

Citation :


4. Conformance
1 In this International Standard, ??shall?? is to be interpreted as a requirement on an
implementation or on a program; conversely, ??shall not?? is to be interpreted as a
prohibition.


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)

Reply

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)


Message édité par Taz le 09-05-2003 à 16:53:54
Reply

Marsh Posté le 09-05-2003 à 17:49:30    

merci beaucoup :)


---------------
Les accents sont en option... j'ai un clavier qwertz.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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