Au niveau du bit les opérateurs sont des opérateurs qui travaillent sur multi-bits des valeurs, mais, conceptuellement, un peu à la fois.
-
AND
est de 1 seulement si deux de ses entrées sont à 1, sinon c'est 0.
-
OR
1 si un ou deux de ses entrées sont à 1, sinon c'est 0.
-
XOR
est de 1 seulement si exactement une de ses entrées sont à 1, sinon c'est 0.
-
NOT
est de 1 seulement si son entrée est 0, sinon c'est 0.
Ceux-ci peuvent souvent être mieux illustré que la table de vérité. Entrée possibilités sont sur le haut et la gauche, la résultante de bits est l'un des quatre (deux dans le cas de ne PAS car il ne comporte qu'une entrée), les valeurs affichées à l'intersection des entrées.
AND | 0 1 OR | 0 1 XOR | 0 1 NOT | 0 1
----+----- ---+---- ----+---- ----+----
0 | 0 0 0 | 0 1 0 | 0 1 | 1 0
1 | 0 1 1 | 1 1 1 | 1 0
Un exemple est si vous voulez seulement le bas 4 bits d'un entier, vous ET avec 15 (binaire 1111) donc:
201: 1100 1001
AND 15: 0000 1111
------------------
IS 9 0000 1001
Le zéro des bits à 15 dans ce cas, effectivement agir comme un filtre, forçant les bits du résultat à zéro.
En outre, >>
et <<
sont souvent inclus comme opérateurs au niveau du bit, et ils "shift" une valeur respectivement à droite et à gauche par un certain nombre de bits de jeter les bits qui n'roll de la fin, vous êtes déplace vers l', et l'alimentation en zéro des bits à l'autre extrémité.
Ainsi, par exemple:
1001 0101 >> 2 gives 0010 0101
1111 1111 << 4 gives 1111 0000
Avec cela à l'esprit, un autre exemple d'opérateurs au niveau du bit est que si vous avez deux 4 bits les valeurs que vous souhaitez emballer dans un 8-bits, vous pouvez utiliser tous les trois de vos opérateurs (left-shift
, and
et or
):
packed_val = ((val1 & 15) << 4) | (val2 & 15)
- L'
& 15
opération assurez-vous que les deux valeurs seulement ont le plus faible de 4 bits.
- L'
<< 4
4-décalage de bits à gauche pour déplacer val1
dans les 4 premiers bits d'une valeur de 8 bits.
- L'
|
simplement combine ces deux ensemble.
Si val1
est de 7, et val2
est de 4:
val1 val2
==== ====
& 15 (and) xxxx-0111 xxxx-0100 & 15
<< 4 (left) 0111-0000 |
| |
+-------+-------+
|
| (or) 0111-0100