begin process at 2008 07 06 03:11:36
1 205 441 membres
21 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Ma parole comment VB traite-t-il les entiers ???? [ Archives Visual Basic / J'AI BESOIN D'AIDE !!!! :) ] (kelly)

Ma parole comment VB traite-t-il les entiers ???? le 31/08/2003 01:03:23

kelly
HELP ! Dites moi tout ce que vous savez au sujet de la gestion des entiers par VB ! Je suis perdu sans type non signé style (WORD ou DWORD) et il faut que je comprenne comment contourner le problème si possible.
Voici un bout de code révélateur de mon problème. Je ne veux justement pas définir a en tant que long.
Merci d'avance.

Dim a As Integer, b As Long
a = &HFF00
Print "&H" + Hex(a) 'je vérifie que a vaut &HFF00, ouf !
b = CLng(a) 'petite conversion forcée même si inutile
Print "&H" + Hex(a Or &HFF000000) 'me sort &HFFFFFF00
Print "&H" + Hex(b Or &HFF000000) 'me sort &HFFFFFF00

Re : Ma parole comment VB traite-t-il les entiers ???? le 31/08/2003 02:05:20

Proger
vb6 gère les entier de la façon suivante :

sur 1 octet (type Byte) : non signé
sur 2 octets (type Integer) : signé
sur 4 octets (type Long) : signé

pour ne pas "changer" de signe, une variable "integer" doit être comprise entre 0h et 7fffh, une "long" entre 0h et 7fffffffh.
le seul moyen de "s'en sortir au-dela" est d'utiliser a fond les opération booléenne et un un petit peu de maths pour "redresser" le signe... exercice peu amusant, je te l'accorde.
avoir la valeur de (par exemple) b = f4a56e17h il faut d'abord faire
temp = b and &h7fffffff
avec temp de type currency (par exemple) ou double
puis
temp = temp + 2^31

etc etc etc ...

dans ton exemple, je ne comprend pas ce que tu fais : tu veux pas définir "a" en tant que long, mais tu veux que a soit égal à ffffff00h ???

Re : Ma parole comment VB traite-t-il les entiers ???? le 31/08/2003 12:12:23

kelly
J'ai pensé en effet à me compliquer un peu la vie pour arriver à mes fins, mais ce problème m'est apparu justement dans un projet ou la performance compte : je recois d'une dll que j'ai écrite en C++, deux entiers 16 bits non signés que je veux tout simplement recoller (hi/lo) pour récupérer une code couleur 32 bits.
Dans mon exemple, je veux que a vale &HFF00FF00 et rien d'autre :) J'ai l'impression que la fonction Hex() travaille comme si l'argument était non signé, alors qu'en VB tous les entiers sont signés. Ce qui est contredit par le fait que PSet(x,y),&HFF00 fait un point turquoise (&HFFFFFF00) (il suffit de taper &HFF00& pour avoir le vert attendu, mais c'est pas logique...)
Je sèche quoi...

Re : Ma parole comment VB traite-t-il les entiers ???? le 31/08/2003 12:20:32

BruNews
(Admin CS)
Print "&H" + Hex(a) 'je vérifie que a vaut &HFF00, ouf !
b = CLng(a) 'petite conversion forcée même si inutile
Print "&H" + Hex(a And &HFFFF)
Si tu veux verifier les 2 octets bas faut pas placer ceux du haut dans le masque qui se fait avec And et non Or qui complemente.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> J'ai pensé en effet à me compliquer un peu la vie pour arriver à mes fins, mais ce problème m'est apparu justement dans un projet ou la performance compte : je recois d'une dll que j'ai écrite en C++, deux entiers 16 bits non signés que je veux tout simplement recoller (hi/lo) pour récupérer une code couleur 32 bits.
> Dans mon exemple, je veux que a vale &HFF00FF00 et rien d'autre :) J'ai l'impression que la fonction Hex() travaille comme si l'argument était non signé, alors qu'en VB tous les entiers sont signés. Ce qui est contredit par le fait que PSet(x,y),&HFF00 fait un point turquoise (&HFFFFFF00) (il suffit de taper &HFF00& pour avoir le vert attendu, mais c'est pas logique...)
> Je sèche quoi...

Re : Ma parole comment VB traite-t-il les entiers ???? le 31/08/2003 12:28:14

kelly
en effet ça marche en masquant ainsi, mais j'avoue que le fonctionnement interne de vb ne m'apparait pas plus clair.

merci encore !


Classé sous : entiers, vb, print, hex, parole

Participer à cet échange

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS