mardi 8 novembre 2011

Les opérateurs logiques en C


Pour finir notre explication sur notre premier programme, il faut parler des opérateurs logiques en C.
Ils permettent de faire des opérations sur des valeurs booléennes ou sur les bits d'une variable. Une variable booléenne peut prendre 2 valeurs 0 (faux) ou 1 (vrai).
Il existe 4 opérateurs logiques principaux pour traiter des valeurs booléennes :
- le OU (OR en anglais) : A OR B est vrai si A ou B est vrai,
- le ET (AND en anglais) : A AND B est vrai si A et B sont vrais,
- le OU exclusif (XOR en anglais) : A XOR B est vrai si uniquement A ou uniquement B est vrai (mais pas les 2 en même temps),
- la NEGATION (NOT en anglais) : NOT A est vrai si A est faux.


Le tableau suivant regroupe ces informations :


NOT AND OR XOR
Input
A
Output
Z
Input
A
Input
B
Output
Z
Input
A
Input
B
Output
Z
Input
A
Input
B
Output
Z
0 1 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 1 1 0 1 1
1 0 0 1 0 1 1 0 1
1 1 1 1 1 1 1 1 0


En C, on utilise les signes suivant pour les opérateurs :
- le '!' (point d'exclamation) pour le NOT,
- le '&' (et commercial) pour le AND,
- le '|' (barre verticale) pour le OR,
- le '^' (accent circonflexe) pour le XOR.

par exemple, la ligne suivante :

z = a | b;

signifie que la vaiable z prend la valeur de a OU b (si a ou b sont vrai, alors z sera vrai).

Tous ces opérateurs agissent aussi sur les bits d'une variable. Par exemple dans le programme suivant :

a = 0x48;
b = 0x11;
z = a | b;

la valeur de z prend comme nouvelle valeur 0x48 | 0x11 = 0b01001000 | 0b00010001 = 0b01011001, c'est à dire la valeur 0x59 en hexadécimal.

A présent, revenons à notre premier programme (voir posts précédents). Le corps du programme était le suivant :

// test de P1.3 (boutton poussoir)
if ((P1IN & 0x08)==0)
{
// activation de la LED sur P1.0
P1OUT = 0x01;
}
else
{
// activation de la LED sur P1.6
P1OUT = 0x40;
}



l'instruction "if" en C permet de tester une condition. Ici si (P1IN & 0x08) est égal à 0 , c'est à dire si le bit numéro 3 de P1IN est égal à 0, alors la condition est vraie.
Au passage on remarque que pour le test d'égalité en C, on utilise une syntaxe "==" avec 2 signes "=". Cela permet au compilateur de faire la différence avec l'opérateur d'affectation de valeur qui lui n'utilise qu'un seul signe égale (comme dans a = 0x48).
Donc pour résumer, si le bit 3 de P1IN est nul (c'est à dire si le bouton poussoir est enfoncé), alors on allume la LED sur P1.0. Sinon on allume la LED sur P1.6.



Aucun commentaire:

Enregistrer un commentaire