Académique Documents
Professionnel Documents
Culture Documents
Introduction
2) Opérations bit-à-bit
décimal
Exemple 8 bits : binaire
non signé signé (*)
(Rappel cours Logique) 00000000 0 0
00000001 1 1
00000010 2 2
…
01111111 127 127
10000000 128 -128
…
11111101 253 -3
11111110 254 -2
11111111 255 -1
main()
{
int i;
unsigned char c=0;
61
TP 4 : Opérations bit-à-bit
Codage binaire des nombres entiers
main()
{
int i;
unsigned char c=0;
→ réponse : 0 1 2 3 … 255 0 1 2 61
TP 4 : Opérations bit-à-bit
Codage binaire des nombres entiers
Ces opérateurs vont nous permettre de travailler sur un ou plusieurs bits (selon
le cas) d’une variable :
- positionner (ou forcer) des bits
- tester des bits
- décaler des bits
- inverser des bits
… avec pour objectif très concret de gérer des registres d’un microcontrôleur, 63
permettant de gérer des entrées-sorties, configurer des modules (ADC, Timer, etc)
TP 4 : Opérations bit-à-bit
Opérations bit-à-bit
Syntaxe :
Exemple :
64
TP 4 : Opérations bit-à-bit
Opérations bit-à-bit
Exemple :
char a=0x15; //une variable a traiter
char masque=0x1A; //"masque" <-> selection de bits
a = a | masque; //ou a |= masque
printf("a=%d\n", a); //a=31 (00010101 | 00011010 = 00011111) 66
printf("a=%x\n", a); //a=1f (affichage en hexadecimal)
TP 4 : Opérations bit-à-bit
Opérations bit-à-bit
Positionner un bit, à 0
Observons la table de vérité de la fonction ET logique :
A B A ET B En raisonnant sur B, on constate que B à 0
0 0 0 impose un 0 en sortie, et ceci quel que soit
0 1 0 l’état de A → cette propriété peut donc être
1 0 0 utilisée pour forcer un (ou plusieurs) bit(s) à 0,
1 1 1 sans modifier les autres.
Exemple :
char a=0x3D; // une variable
char masque=0x22; // une autre qui nous sert de masque
a = a & masque; // ou a &= masque
printf("a=%d\n", a); //c=32 (00111101 & 00100010= 00100000)
68
printf("a=%x\n", a); //c=20 (affichage en hexadecimal)
TP 4 : Opérations bit-à-bit
Opérations bit-à-bit
Résultat :
P1OUT = 0x02; //exemple de valeur
P1OUT |= BIT0; //forcer le bit d’indice 0 a 1 69
P1OUT &= ~BIT1; //forcer le bit d’indice 1 a 0
printf("P1OUT=%02x\n", P1OUT); //01 dans cet exemple
TP 4 : Opérations bit-à-bit
Opérations bit-à-bit
Tester un bit, à 1
Tester un bit, à 0
Positionner
Tester un bit …
un bit …
opération
à1 à0 à1 à0
opérateur logique OU ET ET OU
bit à utiliser
1 0 1 0
dans le masque