cs_mayouma
Messages postés23Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention 8 juin 2005
-
7 juin 2005 à 08:06
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDerniè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
cs_Stubbornman
Messages postés80Date d'inscriptionlundi 18 février 2002StatutMembreDernière intervention12 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...
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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.