OVH Cloud OVH Cloud

Byte signé, est-ce possible ???

8 réponses
Avatar
le_troll
Bonjour,

Problème de déclaration de variable de type byte signé, comme suit:
dim x as byte
x = 0
x = x - 1 ' ---> ERREUR DEPASSEMENT CAPACITE
???

Normalement un type byte peut être:
signé (signed) (-126 à 127)
ou
non signé (unsigned) (0 à 255)

Où qu'est l'erreur svp ???
--
Merci, @+, bye, Joe : ng75@noos.fr
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------

8 réponses

Avatar
ng
Salut,

L'erreur est qu'en VB le type byte n'est pas signé contrairement à l'integer
et au long par exemple, ta variable ne peut donc prendre que des valeurs
comprises dans l'interval [0,255]. Par ailleurs cela parait logique, en
effet un octet ayant une valeur de -1 c'est pas terrible pr y stocker du
binaire.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"le_troll" a écrit dans le message de news:
#JEz#
Bonjour,

Problème de déclaration de variable de type byte signé, comme suit:
dim x as byte
x = 0
x = x - 1 ' ---> ERREUR DEPASSEMENT CAPACITE
???

Normalement un type byte peut être:
signé (signed) (-126 à 127)
ou
non signé (unsigned) (0 à 255)

Où qu'est l'erreur svp ???
--
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------






Avatar
le_troll
Ouais, merci, ok, le byte n'est pas signé et est positif...

Ben tu dis que l'integer est signé, il me semble qu'il prend 2 octets
lui, et tous les bits allumés ça fait 65.000 (et quelques), il ne reste
aucun bit pour le signer, alors en suivant ton raisonnement, je ne vois pas
non plus où tu mets le bit de signe (le dernier généralement), comme dans
moult systèmes, ce n'est pas la taille réellement occupée en mémoire qui est
annoncée pour la programmation, sinon l'integer à 65.000 prenant tous les
bits de son Word, il lui faut au moins un quartet en plus pour signer...
--
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------


"ng" a écrit dans le message de news:

Salut,

L'erreur est qu'en VB le type byte n'est pas signé contrairement à


l'integer
et au long par exemple, ta variable ne peut donc prendre que des valeurs
comprises dans l'interval [0,255]. Par ailleurs cela parait logique, en
effet un octet ayant une valeur de -1 c'est pas terrible pr y stocker du
binaire.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"le_troll" a écrit dans le message de news:
#JEz#
> Bonjour,
>
> Problème de déclaration de variable de type byte signé, comme suit:
> dim x as byte
> x = 0
> x = x - 1 ' ---> ERREUR DEPASSEMENT CAPACITE
> ???
>
> Normalement un type byte peut être:
> signé (signed) (-126 à 127)
> ou
> non signé (unsigned) (0 à 255)
>
> Où qu'est l'erreur svp ???
> --
> Merci, @+, bye, Joe :
> ----------------------------------------------------------
> Avec une hache, celui qui tient le manche a toujours raison.
> ----------------------------------------------------------
>
>
>
>




Avatar
François Picalausa
Bonjour/soir,

Dim MyInt as Integer
MyInt = 32768 'Erreur dépassement de capacité...

L'integer (codé sur deux bytes) est signé et a un champ allant de -32768 à
32767
Pour tester si un entier est positif:
2000 And &h8000

Mais l'Integer prend deux byte.
Et il ne faut pas de bit supplémentaire pour le signe.
Par conséquent, si une API demande un uint, que tu veux lui passer une
valeur supérieure à 32767, il suffira de lui passer une valeur négative
(selon la représentation VB)... pour 65535, -1 conviendra.
Mais le plus simple reste la notation hexadécimale.. enfin, je trouve :-)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"le_troll" a écrit dans le message de
news:
Ouais, merci, ok, le byte n'est pas signé et est positif...

Ben tu dis que l'integer est signé, il me semble qu'il prend 2
octets lui, et tous les bits allumés ça fait 65.000 (et quelques), il
ne reste aucun bit pour le signer, alors en suivant ton raisonnement,
je ne vois pas non plus où tu mets le bit de signe (le dernier
généralement), comme dans moult systèmes, ce n'est pas la taille
réellement occupée en mémoire qui est annoncée pour la programmation,
sinon l'integer à 65.000 prenant tous les bits de son Word, il lui
faut au moins un quartet en plus pour signer...


Avatar
le_troll
Ah ok, 32.000 et le dernier bit en signe, ok, là ça colle...

--
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------


"François Picalausa" a écrit dans le message de news:

Bonjour/soir,

Dim MyInt as Integer
MyInt = 32768 'Erreur dépassement de capacité...

L'integer (codé sur deux bytes) est signé et a un champ allant de -32768 à
32767
Pour tester si un entier est positif:
2000 And &h8000

Mais l'Integer prend deux byte.
Et il ne faut pas de bit supplémentaire pour le signe.
Par conséquent, si une API demande un uint, que tu veux lui passer une
valeur supérieure à 32767, il suffira de lui passer une valeur négative
(selon la représentation VB)... pour 65535, -1 conviendra.
Mais le plus simple reste la notation hexadécimale.. enfin, je trouve :-)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"le_troll" a écrit dans le message de
news:
> Ouais, merci, ok, le byte n'est pas signé et est positif...
>
> Ben tu dis que l'integer est signé, il me semble qu'il prend 2
> octets lui, et tous les bits allumés ça fait 65.000 (et quelques), il
> ne reste aucun bit pour le signer, alors en suivant ton raisonnement,
> je ne vois pas non plus où tu mets le bit de signe (le dernier
> généralement), comme dans moult systèmes, ce n'est pas la taille
> réellement occupée en mémoire qui est annoncée pour la programmation,
> sinon l'integer à 65.000 prenant tous les bits de son Word, il lui
> faut au moins un quartet en plus pour signer...




Avatar
Zoury
> Par ailleurs cela parait logique, en
effet un octet ayant une valeur de -1 c'est pas terrible pr y stocker du
binaire.



je n'ai pas compris cette phrase... *tous* les types de données sont stockée
en binaire.. il sont simplement *affiché* sous une autre base (décimal) afin
de les rendre plus intelligible pour l'homme.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Jean-Marc
"le_troll" a écrit dans le message de
news:
Ouais, merci, ok, le byte n'est pas signé et est positif...

Ben tu dis que l'integer est signé, il me semble qu'il prend 2 octets
lui, et tous les bits allumés ça fait 65.000 (et quelques), il ne reste



RTFM !

Integer 2 bytes -32,768 to 32,767
Avatar
le_troll
Salut Yanick,
Il voulait dire à ma réponse, qu'en binaire, il n'y avait plus de bit de
libre sur l'octet pour stocker le signe négatif > à (-127)
Sinon, tu dis que c'est stocké en binaire, et que ça passe en décimal pour
notre compréhension, tu oublies la phase intermédiaire des quartets qui
permettent eux aussi une lecture intermédiaire en hexa, lol...
--
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> Par ailleurs cela parait logique, en
> effet un octet ayant une valeur de -1 c'est pas terrible pr y stocker du
> binaire.

je n'ai pas compris cette phrase... *tous* les types de données sont


stockée
en binaire.. il sont simplement *affiché* sous une autre base (décimal)


afin
de les rendre plus intelligible pour l'homme.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous




Avatar
Patrice Henrio
Non je ne crois pas qu'il oublie car en définitive même le quartet est lu en
binaire dans le processeur.
A moins de considérer celui-ci comme une boîte noire et dans ce cas ce n'est
ni du binaire, ni du décimal mais du dWord.
"Les données sont signées" signifie simplement que l'interprétation que le
programme fera de ces données correspondra à un nombre signé ou non. Pour le
processeur il n'y a aucune différence.



"le_troll" a écrit dans le message de
news:
Salut Yanick,
Il voulait dire à ma réponse, qu'en binaire, il n'y avait plus de bit de
libre sur l'octet pour stocker le signe négatif > à (-127)
Sinon, tu dis que c'est stocké en binaire, et que ça passe en décimal pour
notre compréhension, tu oublies la phase intermédiaire des quartets qui
permettent eux aussi une lecture intermédiaire en hexa, lol...
--
Merci, @+, bye, Joe :
----------------------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison.
----------------------------------------------------------


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
> > Par ailleurs cela parait logique, en
> > effet un octet ayant une valeur de -1 c'est pas terrible pr y stocker


du
> > binaire.
>
> je n'ai pas compris cette phrase... *tous* les types de données sont
stockée
> en binaire.. il sont simplement *affiché* sous une autre base (décimal)
afin
> de les rendre plus intelligible pour l'homme.
>
> --
> Cordialement
> Yanick Lefebvre - MVP pour Visual Basic
> http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
>
> Merci de poster les réponses au groupe afin d'en faire profiter à tous
>
>