2010-02-12 6 views
1

J'ai une question rapide sur les bits de masquage. Si je veux tourner deux 8 bits flux sur, dois-jeClarification sur les bits de masquage

utilise la logique AND contre les deux:

 10101010 
AND 01101001 
    ________ 
    00101000 

ou que je change en fait l'un des bits dans le flux de tourner les bits sur? Je suppose que ma question est quand je suis allumer (en utilisant AND) ou en éteignant (en utilisant OR) puis-je changer l'un des bits, ou simplement en comparant les deux en utilisant la logique AND/OR?

+1

Qu'entendez-vous par «allumer»? La façon dont vous utilisez le terme montre soit un malentendu profond, ou un usage non standard. –

+0

Je pense que je voudrais juste prendre un flux de bits (disons 10101010) et changer le 4ème bit en ajoutant un 01010101 et en plaçant ces deux dans et logique ET ou OU? – HollerTrain

+0

Je pense que '00001000' tourne sur le 4ème bit et '11110111' désactive le 4ème bit? – HollerTrain

Répondre

0

D'autres, corrigez-moi si je me trompe:

Pour activer le 4 bits dans un flux 8bit, vous devez comparer le flux de 8bit en utilisant la logique OR utilisant 00001000.

Pour désactiver la 4ème bith dans un flux 8bit, vous devez comparer le flux 8bit à l'aide de la logique AND en utilisant 11110111.

Pour basculer le bit, vous devez utiliser 11111111 en utilisant la logique XOR.

+0

Que 'XOR' bascule chaque bit dans le" flux ". – Sapph

+0

@Sapph, oui correct. Donc, si je veux activer un bit spécifique, j'utiliserais '00000001' (en plaçant le premier bit que nous comparons avec cette vapeur) dans un scénario logique' AND', mais je peux aussi utiliser cette méthode en comparant simplement deux flux de bits (ne pas essayer d'activer/désactiver un seul bit)? – HollerTrain

+0

Non, la logique XOR n'aurait pas le résultat souhaité 'basculer'. –

0

Je ne suis pas sûr de ce que vous entendez par «flux» dans ce cas.

Dans la plupart des langues, vous devrez avoir une affectation ainsi que l'opération binaire.

qui vous aurait habituellement quelque chose comme

foo = get_byte() // Call some function to get the original value of foo 
foo = foo AND 11110111 // Replace foo with the result of the AND, which 
         // in this case will turn off the 4th bit, and leave 
         // the other bits unchanged 

La dernière ligne remplace le contenu de foo avec les résultats de l'opération binaire

1

Pour activer (1), vous devez utiliser le OU opérateur avec un 1 dans la position que vous souhaitez activer, parce que peu importe ce que la valeur d'origine dans le flux est, le résultat serait sur

00000000 // whatever the values in the input 
OR 00000001 // 'OR' turns on the last position in the stream 
    --------- 
    00000001 

pour éteindre (0), vous utiliseriez l'opérateur AND avec un 0 dans la position que vous voulez désactiver, car quelle que soit la valeur d'origine dans le flux d'entrée, le résultat serait OFF.

11111111 // whatever the values here 
AND 11111110 // turns off the last position in the stream 
    --------- 
    11111110