Aidez moi SVP

cs_mayouma Messages postés 23 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 8 juin 2005 - 7 juin 2005 à 08:06
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 7 juin 2005 à 09:39
Quelqu'un pourrai m'aider à comprendrece bout de code en C++:
*Cle = (((*d ^ ri()) & ((1<<Taille) - 1)) | (1<<Taille))
avec d de type unsigned short*
ri() est une methode qui retourne unsigned long
Taille est de type unsigned long et Cle de type unsigned short*
j'ai pas compris la fonctionalité du: '<< ', '&' et du '| ' dans cette instruction .
Merci bien

4 réponses

cs_Stubbornman Messages postés 80 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 12 janvier 2007
7 juin 2005 à 08:25
Pour ce qui est des & et |, ce sont des operatuers binaire: & pour ET et | pour OU.
Quant a <<, c'est un decalage binaire vers la gauche de Taille bits.

Quant a l'utilite de cette operation, faut voir dans l'ensemble du code...
cs_Stubbornman Messages postés 80 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 12 janvier 2007
7 juin 2005 à 08:27
desole, j'vois qu'il manque la moitie de ce que j'ai ecris, je recommence donc:

& -> ET binaire
| -> OU binaire
<< -> decalage binaire a gauche de Taille bits.

Pour comprendre a quoi ca sert, faut voir avec le reste du code....
cs_mayouma Messages postés 23 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 8 juin 2005
7 juin 2005 à 08:39

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
7 juin 2005 à 09:39
Tout d'abord il faut savoir que les entiers sont représentés en interne en binaire (0 ou 1 pour chaque bit).
par exemple 124 en décimal ça donne 0111 1100 en binaire.
124 = 0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6 + 0*2^7



- & : il s'agit d'un ET logique bit à bit entre 2 valeurs. On prend chaque bits des opérandes et on applique
la table suivante :
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1


exemple :124&57 01111100 & 00111001 00111000


- | : il s'agit d'un OU logique bit à bit entre 2 valeurs. On prend chaque bits des opérandes et on applique
la table suivante
0 & 0 = 0
1 & 0 = 1
0 & 1 = 1
1 & 1 = 1


exemple :124|57 01111100 | 00111001 01111101


il existe également des XOR (^) et un NOT (~)
Ces opérateur servent surtout à faire des masques pour des champs de bits.Par exmemple lorsque l'on veut
stocker 8 valeurs correspondant à des états VRAI ou FAUX, au lieu d'utiliser 8 variables différentes on
utilise une seule et des champs de bits. par exemple le bit 0 pour l'état 0 etc. Pour Affecter une valeur
on utilisera le OU et pour la tester le ET.


- << : il s'agit d'un décalage à gauche des bits :


exemple :124<<2 01111100<<2 0111110000


- >> : il s'agit d'un décalage à droite des bits :


exemple :124>>2 01111100>>2 011111


Ces opérateur servent à extraire des bits d'un champ de bit mais également à réaliser des multiplications
er de divisions par des puissances de 2 trè rapidement (comme en décimal on on rajoute des 0 ou vire
des chiffres pour multiplier ou diviser par 10 facilement)

Pour ton exemple, il s'agit sans doute de calculer un checksum ou de réaliser du cryptage. Les opérations binaires utilisées
sont dont liées à des formules mathématiques assez complexes ayant des propriétés particulières et dont l'interprétation
en C donne des expressions assez tortueuses.
Rejoignez-nous