Next: Diviser pour régner
Up: No Title
Previous: La fonction main (2)
On a parfois à manipuler l'écriture binaire d'un entier. On utilise alors
les opérateurs suivants:
- et :
&
. Effectue un et sur
chacun des bits de ses deux opérandes. Ainsi 6&3
vaut 2
puisque . - ou :
|
. Effectue un ou sur
chacun des bits de ses deux opérandes. Ainsi 6|3
vaut 7
puisque . - ou exclusif :
^
. Effectue un
ou exclusif sur chacun des bits de ses deux opérandes. Ainsi
6^3
vaut 5
puisque . - décalage à droite :
>>n
. Effectue un
décalage à droite de n crans de tous les bits (ceux le
plus à droite << tombent dans le vide >>, des zéros rentrent par la
gauche). Ainsi 14>>2
vaut 3
puisque . - décalage à gauche :
<<n
. Effectue un
décalage à gauche de n crans de tous les bits (ceux le
plus à gauche << tombent dans le vide >>, des zéros rentrent par la
droite). Ainsi 3<<2
vaut 12
puisque . - complémentaire :
~
. Effectue un
complément de tous les bits (les zéros deviennent des 1 et
réciproquement). Ainsi ~5
vaut -6
puisque , qui se trouve valoir -6 (car
etc., mais etc.)
Ces opérateurs sont utilisés pour travailler sur les bits de la façon
suivante (un peu technique!) :
- Lever le bit :
i |= (1<<n)
- Baisser le bit :
i &= ~(1<<n)
- Complémenter le bit :
i ^= (1<<n)
- Tester si le bit est levé :
if (i&(1<<n)) ...
mais aussi dans les cas fréquents suivants où elles accélèrent le programme :
- Non-parité d'un nombre : if (i&1) ... et plus
généralement pour calculer le reste de la division par une puissance de 2 :
j = i&63 équivaut à j = i%64
- Division par 2 :
j = i>>1
et plus
généralement pour calculer le quotient de la division par une
puissance de 2 : j = i>>6
équivaut à j = i/64;
- Multiplication par 2 :
j = i<<1
et plus
généralement pour toute multiplication par une puissance de 2 :
j = i<<6
équivaut à j = i*64;.
Cas particulier important : on utilise 1<<n
pour obtenir
.
Next: Diviser pour régner
Up: No Title
Previous: La fonction main (2)
R.Lalement (Cermics)