Page 1 sur 1

Problème ou non ?

Publié : dim. 18/juin/2006 12:13
par Anonyme2
Comme je n'ai pas tout suivi depuis la sortie de la version 4, je viens de m'apercevoir de ceci dans la doc à propos des type de variables (byte et word mais peut-être aussi sur les long et quad)

La doc dis ceci
Byte .b 1 octet -128 à +127
Caractere .c 1 octet (ascii) 0 à +255
mais on a juste après l'énumération de tous les types ceci :
Types non-signés: mis à part le type caractère (.c) (qui est un 'byte' non-signé en mode ascii, et un 'word' non-signé en mode unicode), PureBasic ne supporte pas nativement les types non-signés. Néanmoins, il est possible d'utiliser l'astuce suivante pour émuler un type non-signé:
a.b = 192
Debug a & 255 ; affichera 192
c'est clair, l'exemple montre tout à fait le contraire de la définition, on attribue 192 à un byte qui est un nombre signé . SI on compile l'exemple, ça marche alors que l'on devrait avoir une erreur du compilateur puisque l'on est en dehors de la plage. En plus l'exemple apprte peu puisque le nombre est positif.

Mais cette fois si on tente d'attribuer la valeur -192 à un byte comme ceci
a.b = -192
le compilateur indique un dépassement mais avec le message d'erreur suivant :
overflow error : a 'byte' value (.b) must be between -128 and +255
ce qui ne correspond pas à la définition du type byte

Idem avec les word (à voir avec les long et quad)

Publié : dim. 18/juin/2006 12:59
par Dr. Dri
C'est peut être plus clair comme ca :

Code : Tout sélectionner

l.l = 192
b.b = l

Debug b
Debug b & $FF
Dri

Publié : dim. 18/juin/2006 14:22
par Anonyme2
Dr. Dri a écrit :C'est peut être plus clair comme ca :

Code : Tout sélectionner

l.l = 192
b.b = l

Debug b
Debug b & $FF
Dri
Heu,

le problème vient de la définition de l'intervale des bytes et word en signé alors qu'en réalité on peut attribuer une valeur positive en dehors de l'intervale

Publié : dim. 18/juin/2006 14:33
par Dr. Dri
bah pour l'intervalle, je suis d'avis qu'il ne devrait même pas y en avoir... sinon je voulais juste mettre en évidence le fait que l'exemple n'apporte pas si peu que ca dans la mesure où 192 devient -64 dans un octet signé.

Dri

Publié : dim. 18/juin/2006 16:04
par Anonyme2
Dr. Dri a écrit :bah pour l'intervalle, je suis d'avis qu'il ne devrait même pas y en avoir... sinon je voulais juste mettre en évidence le fait que l'exemple n'apporte pas si peu que ca dans la mesure où 192 devient -64 dans un octet signé.

Dri
L'intervale est obligatoire (on ne peut pas stocker un entier sans limite sur 8 bit), en signé ou non. C'est la représentation que l'on se fait de la valeur qui donne le type du nombre, signé ou non, (bit de le plus à gauche)