ben peut-être qu'il faisait des divisions et des modulo ?
euh sinon Nil fais gaffe quand tu parles d'opération booléenne, a priori ça signifie (ou du moins ça peut être compris comme) opération sur des booléens, et c'est ça qu'a l'air d'avoir compris Daniel. Les opérations "bitwise" n'ont (presque) rien à voir avec les opérations sur les valeurs de vérité (enfin conceptuellement ça a à voir, mais d'un point de vue informatique ça n'a aucun rapport).
Bon je vais essayer de faire un mini topo vu qu'il n'y a pas l'air d'y avoir un lien qui traîne.
(Je prends juste des exemples, ça devrait être assez clair)
soit a qui s'écrit 01001101 en binaire. (pour le déclarer : unsigned char a = 77; (représentation décimale) ; ou, équivalent : unsigned char a = 0x4D; (représentation hexa) ; ou encore, valable *uniquement avec tigcc, ce n'est pas du C standard* : unsigned char a = 0b01001101;)
soit b qui s'écrit 10011001 en binaire.
a & b est le nombre (de 8 bits, l'octet quoi) qui a des 1 là où a *et* b ont tous deux des 1, et des 0 là où l'un des deux à un 0. Donc a & b = 00001000.
a | b est le nombre qui a des 1 là où soit a soit b a un 1, et des 0 là où ils ont tous les deux un 0. Donc a | b = 11011101.
a ^ b est le nombre qui a des 1 là où les bits de a et b sont différents et un 0 là où ils sont identiques. Donc a ^ b = 11010100.
Propriété intéressante : a ^ (a ^ b) = b, et b ^ (a ^ b) = a.
~a est le nombre qui a des 0 là où a a des 1 et réciproquement.
Ensuite tu as les opérateurs de décalage : (a >> 3) décale tous les bits de a vers la droite de 3 rangs, en rajoutant des 0 à gauche, donc (a >> 3) = 00001001 (

ce que je dis n'est valable qu'en UNSIGNED, sinon ça se comporte de façon plus compliquée).
<< fait la même chose vers la gauche, en rajoutant des 0 à droite.
Bon avec tous ces opérateurs tu peux facilement faire des opérations simples comme :
— mettre à 1 le troisième bit en partant de la droite d'un octet n : n | 0b100 (ou n | 4)
ainsi a | 0b100 = a (le troisième bit est déjà à 1) mais b | 0b100 = 10011101.
— mettre à 0 le troisième bit : n & 0b11111011
— changer la valeur du troisième bit : n ^ 0b100
— savoir si le troisième bit est à 1 ou à 0 : n & 0b100 vaudra 0 si et seulement si le bit est à 0. Donc tu peux faire un if (n & 0b100) qui s'exécutera ssi le bit est à 1.
Attention que si le bit est à 1 le résultat n'est PAS 1 (c'est le nombre où seul le bit que tu voulais tester est à 1), en l'occurrence a & 0b100 = 4. Et b & 0b100 = 0.
etc.