L'essentiel est que tu aies enfin réalisé qu'il n'y avait aucun Hors Sujet....;)
D'autres auront compris tout ce que montre d'autre cette méthode (et c'est tant mieux...).
Version imprimable
Petite explication, pour ceux qui n'ont pas compris grand chose.
La notation &H8000 retourne un entier court (-32768)
SI on écritLe premier terme est un long, le deuxième un court. Pour faire le Xor, la machine transforme le court en long.Code:&H1FFFFFF Xor &H8000
Sur 4 octets, -32768 s'écrit FFFF8000
Le résultat du XOr entre 1FFFFFF et FFFF8000 donne FE007FFF ( = -33521665)
Si on écritles deux termes sont lus comme des longs.Code:H1FFFFFF Xor &H8000&
Le résultat du XOr entre 1FFFFFF et 8000 donne 1FF7FFF (= 33521663).
Voilà. Je pense qu'il n'y a plus aucun mystère.
Il ne reste plus qu'à taguer :resolu:
PGZ
Bonjour à tous,
je suis content de voir que ma petite question a suscité un tel débat d'idées !
En essayant de recentrer un peu le sujet, j'ai créé un petit programme de test qui démarre avec l'appui sur un bouton:
1ère remarque:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 Private Sub CommandButton1_Click() Dim erreur As Double erreur = 0 erreur = erreur Or &H1& erreur = erreur Or &H2& erreur = erreur Or &H4& erreur = erreur Or &H8& erreur = erreur Xor &H1& erreur = erreur Xor &H2& erreur = erreur Xor &H4& erreur = erreur Xor &H8& erreur = erreur Or &H10& erreur = erreur Or &H20& erreur = erreur Or &H40& erreur = erreur Or &H80& erreur = erreur Xor &H10& erreur = erreur Xor &H20& erreur = erreur Xor &H40& erreur = erreur Xor &H80& erreur = erreur Or &H100& erreur = erreur Or &H200& erreur = erreur Or &H400& erreur = erreur Or &H800& erreur = erreur Xor &H100& erreur = erreur Xor &H200& erreur = erreur Xor &H400& erreur = erreur Xor &H800& erreur = erreur Or &H1000& erreur = erreur Or &H2000& erreur = erreur Or &H4000& erreur = erreur Or &H8000& erreur = erreur Xor &H1000& erreur = erreur Xor &H2000& erreur = erreur Xor &H4000& erreur = erreur Xor &H8000& erreur = erreur Or &H10000 erreur = erreur Or &H20000 erreur = erreur Or &H40000 erreur = erreur Or &H80000 erreur = erreur Xor &H10000 erreur = erreur Xor &H20000 erreur = erreur Xor &H40000 erreur = erreur Xor &H80000 erreur = erreur Or &H100000 erreur = erreur Or &H200000 erreur = erreur Or &H400000 erreur = erreur Or &H800000 erreur = erreur Xor &H100000 erreur = erreur Xor &H200000 erreur = erreur Xor &H400000 erreur = erreur Xor &H800000 End Sub
cela fonctionne, les bits sont mis à 1 par OR est éteints par XOR. (Je ne comprends pas pourquoi cela fonctionne dans cet exemple alors que cela ne marche pas dans mon prog. :roll:. Je vais donc revoir mon code, il y a certainement une coquille !)
2nde remarque:
Impossible d'écrire "erreur = erreur Xor &H10000&". A partir de cette taille de nombre, le 2nd "&" s'efface lorsque je valide l'entrée de la ligne de programme.
Est-ce que Philben pourrait m'expliquer la signification de ce second "&" ?
Bonjour,
le suffxe & définit un type long
VB ote ce suffixe lorsqu'il constate son inutilité (lorsque le nombre est manifestement déjà un long)
ainsi, dans :
VB corrigera immédiatement enCode:
1
2 MsgBox 1000& MsgBox 70000&
EDIT :Code:
1
2 MsgBox 1000& MsgBox 70000
Si ton application doit être distribuée, je te recommande de prendre la précaution de "forcer la main" autrement, car la limite d'un entier dépend de la plateforme finale :
et ce sera ainsi toujours bon.Code:
1
2
3 Dim toto as long toto = 38000 msgbox 100& xor toto
bonsoir,
rtg57 , oui le & en fin d'une variable où d'une constante défini le type long.. mais tu ne peu pas t'en passer comme cela.
pour preuve :
Un signe - qui fait toute la différence !Code:
1
2
3
4
5
6
7
8 Dim lVar1 As Long Dim lVar2 As Long 'Variable 1 mise à jour sans le & de fin lVar1 = &H8000 'Variable 2 avec le & lVar2 = &H8000& MsgBox (0 Xor lVar1) & " <> " & (0 Xor lVar2)
Merci beaucoup pour toutes ces réponses et conseils.
Je pense que l'on va en rester là.
J'active donc le tag 'Résolu'