Disons que 5&3
, largeur de quatre bits:
0101b = 5dec
0011b = 3dec
------------
0001b = 1dec
Vous venez &
les bits dans la même colonne. Et puisque l'opérateur &
renvoie uniquement 1
lorsque les deux arguments sont 1
, les bits supérieurs de 5
non présents dans 3
sont masqués.
Quant à votre exemple des commentaires:
$ perl -E 'printf "%b\n", 0x76'
1110110
Et maintenant:
1110110 = 0x76
0000011 = 3dec
-------
0000010 = 2dec
... et juste pour valider:
$ perl -E 'say 0x76&3'
2
Le schéma est simple, vous juste &
chaque colonne n:
x
y
-
z
Où z
est x&y
. Aha, à en juger par vos commentaires dans la réponse voisine, le problème est ailleurs. Les variables numériques ne contiennent pas de "valeurs hexadécimales". Les variables numériques contiennent un motif binaire représentant un nombre. "Un nombre" n'est jamais binaire, décimal ou hexadécimal. Quand vous dites "trois", il n'y a pas de système de numéro en jeu, trois est un trois, peu importe quoi. Lorsque vous dites quelque chose comme var x = 0x76
dans le code source, la machine lit la représentation hexadécimale du nombre, crée un modèle binaire représentant ce nombre et le stocke dans la mémoire correspondant à la variable. Et quand vous dites quelque chose comme x &= 3
, la machine crée un modèle de bit représentant le numéro trois, combine cela avec le modèle de bits stocké dans la variable et stocke le résultat dans la variable.
Et je ne comprends pas pourquoi les gens ne cherchent pas avant de demander. Je suppose que nous devons avoir deux choses à apprendre :-) Voir http://stackoverflow.com/questions/1746613/bitwise-operation-and-usage/1746642#1746642 – paxdiablo