2012-03-03 4 views
0

Actuellement, j'étudie l'arithmétique bit à bit. C'est vraiment facile, parce que j'ai des antécédents de CS. Mais je ne comprends tout simplement pas un moment avec cet opérateur.Opérateurs et opérateurs arithmétiques bit à bit

Par exemple:

variable3 = variableOne & 3; 

ou

variable3 &= 3; 

En fait, cela n'a pas d'importance.

Je ne comprends pas comment le processus de mise à 0 est en cours. Et comment pouvez-vous le traiter sur le papier?

+2

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

Répondre

2

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 

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.

+0

Oh .. Ouais .. Merci. Vraiment facile à comprendre. Alors maintenant va pratiquer))) –

+0

Par exemple: varibleOne = 0x76; variableOne &= 3; Comment ça marche –

+0

Ok, comprenez! Merci de votre aide!!! –

Questions connexes