Calculs : opérateurs And, Or et Xor

dionys0s

XLDnaute Impliqué
Bonjour le forum,

je me suis intéressé récemment aux couleurs en VBA pour dégoter du code permettant de calculer les nuances de rouge, vert et bleu d'une couleur Long. J'ai trouvé ce qu'il faut, et même plusieurs méthodes. Mes questions portent sur les différentes méthodes.

Voici les deux méthodes trouvées :
VB:
Public Function Red1(ByVal Color As Long) As Long: Red1 = Color Mod 256: End Function
Public Function Green1(ByVal Color As Long) As Long: Green1 = Color \ 256 Mod 256: End Function
Public Function Blue1(ByVal Color As Long) As Long: Blue1 = Color \ 65536 Mod 256: End Function

Public Function Red2(ByVal Color As Long) As Long: Red2 = Color And 255: End Function
Public Function Green2(ByVal Color As Long) As Long: Green2 = Color \ 256 And 255: End Function
Public Function Blue2(ByVal Color As Long) As Long: Blue2 = Color \ 65536 And 255: End Function

Autant je pige les formules de la première méthode, autant je ne comprends pas celles de la deuxième méthode. Quelqu'un saurait peut-être m'expliquer ? Je ne comprends pas en quoi "Color Mod 256" est équivalent à "Color And 255" (et pareil pour Green et Blue). Comment influe le "And" entre deux entiers ? Comment influerait le "Or" ? le "Xor" ?

D'avance merci pour vos réponses.
dionys0s
 

eriiic

XLDnaute Barbatruc
Bonjour,

AND 255 te fait un masque bit à bit avec donc 000000000000000011111111 et te retourne donc les 8 bits de poids faible, les autres étant masqués.
Ce qui revient au même que de calculer son modulo 256 (le reste de la division par 256 est l'octet de poids faible).

Pour info et t'aider à comprendre il faut prendre la \256 pour une rotation de 8 bits vers la droite. On voit qu'on cherche à travailler au niveau de l'octet, qu'on ramène à celui de plus faible indice.

Comment influerait le "Or" ?
Le Or de colOr ? :)
eric
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re,
Bonjour Eric

And 255 te fait un masque bit à bit avec donc 000000000000000011111111 et te retourne donc les 8 bits de poids faible, les autres étant masqués.
Ce qui revient au même que de calculer son modulo 256.

J'ai l'impression qu'il me faudrait une bonne quarantaine d'heures de cours d'informatique pour pouvoir comprendre cette phrase...

Le Or de colOr ? :)
Que donnerait par exemple x Or y, et x Xor y

dionys0s
 

eriiic

XLDnaute Barbatruc
Table de vérité du AND :
0 AND 0 = 0
0 AND 1 =0
1 AND 0 = 0
1 AND 1 = 1
Tu vois que quand tu as 0 tu récupères toujours 0 (tu as masqué un bit), quand tu as 1 tu obtiens l'autre bit.
01010101 AND 00001111 = 00000101, tu as masqué les 4 bits de poids fort.
Il te reste les 4 bits de poids faible = 0101 = 5
Et pour faire le parallèle : 0101010101=85, 00001111=16
et 85 MOD (16-1) = 85 MOD 15 =5, on retrouve la même valeur 5
Il y bien équivalence entre un masque x AND 2^n et x Mod (2^n)-1

Que donnerait par exemple x Or y, et x Xor y
N'importe quoi dans ce contexte et hors sujet. On ne choisit pas une fonction au hasard mais selon le besoin.
Si tu t'y intéresses, fait des recherches sur l'algèbre de Boole, ainsi que sur les tables de vérités des fonctions logiques.
eric
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Cette fourniture pourrait vous intéresser.

En dehors de cela …And 255 a le même effet que Mod 256 pour isoler l'octet de poids faible d'un entier.
Simplement il procède différemment: au lieu de prendre le reste de la division par 256 il combine bit par bit le nombre avec celui dont les 8 derniers bits sont à 1, ce qui remet à 0 les autres. 255 c'est &HFF en hexa. Mais cela a déjà été expliqué par eriiiic, je vois.
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
648

Statistiques des forums

Discussions
312 176
Messages
2 085 966
Membres
103 069
dernier inscrit
jujulop