japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 2021
-
27 avril 2005 à 00:05
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 2021
-
27 avril 2005 à 01:17
Salut à toutes et à tous.
Le LongWord est-il réellement un 32 bits non signé ?
Son étendue devrait être 0..4294967295 (4 294 967 295).
Or l'étendue que je constate est 0..2147483647 (2 147 483 647).
Même limite supérieure que le LongInt, qui est un entier sur 32 bits
signé... sauf que mon LongWord, lui, il ne prend pas les valeurs
négatives !
J'ai l'impression de me faire avoir, quoi...
D'ailleurs, l'instruction
var LWrd: LongWord;
LWrd := 1 shl 31;
ne passe pas.
Je ne peux décaler en fait que de 30 bits.
Quelque chose doit m'échapper.
Si quelqu'un peut m'apporter un éclaircissement, je pourrai enfin dormir d'un sommeil moins agité les nuits prochaines.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 27 avril 2005 à 00:56
Tu as en effet une variable de type LongWord mais tu lui affectes une constante de type entier. Delphi détermine le type de données de la constante en fonction de sa valeur :
1 est compilé comme un integer (entier 32 bits signé)
1 shl 31 ne peut donc pas être compilé (valeur hors de la plage autorisée)
Cependant le fait de le transtyper permet à Delphi de savoir que la constante est entière mais non signée.
Pour le verifier, il suffit de transtyper uniquement 1 :
LWrd := LongWord( 1 ) shl 31 ;