Problème ou non ?

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Problème ou non ?

Message 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)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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)
Répondre