Langage C & C++
Opérateurs
Accueil

du site


Opérateurs arithmétiques
Opération
Signe
Exemple
addition
+
s = a + b
soustraction
-
d = a - b
multiplication
*
p = a * b
division
/
q = a / b
Modulo (reste de la division)
%
r = a % b


Opérateurs bit à bit ( bitwise )
Opération
Signe
Exemples
et (and)
&
--a = 0 1 0 1
--b = 0 1 1 0
a&b = 0 1 0 0
ou inclusif (or)
|
..a = 0 1 0 1
..b = 0 1 1 0
a|b = 0 1 1 1
ou exclusif (xor)
^
..a = 0 1 0 1
..b = 0 1 1 0
a^b = 0 0 1 1
complément (inversion des bits)
~
a = 0 1 0 1
~a = 1 0 1 0
décalage à gauche de n bits
<<
b = a << n
décalage à droite de n bits
>>
b = a >> n


Opérateurs d'affectation
Opération
Signe
Exemples et équivalences
affectation simple
=
lvalue = expr;
multiplication et affectation
*=
x *= 3;
x = x * 3;
division et affectation
/=
x /= 3;
x = x / 3;
modulo et affectation
%=
x % = 3;
x = x % 3;
addition et affectation
+=
x += 3;
x = x + 3;
soustraction et affectation
-=
x -= 3;
x = x - 3;
décalage gche et affectation
<<=
x <<= 3;
x = x << 3;
décalage dte et affectation
>>=
x >>= 3;
x = x >> 3;
et bit à bit et affectation
&=
x &= 3;
x = x & 3;
ou bit à bit et affectation
|=
x |= 3;
x = x | 3;
xor bit à bit et affectation
^=
x ^= 3;
x = x ^= 3;

Post et pré incrémentations et décrémentations

Incrémenter une variable signifie lui ajouter un. Décrémenter : lui soustraire un.
Pré incrémenter une variable signifie que lorsque l'ordinateur la récupère en mémoire, il l'incrémente d'abord avant de s'en servir.
Post incrémenter signifie que l'ordinateur récupère la variable en mémoire, l'utilise telle quelle dans l'opération demandé, puis, l' incrémente après l'opération avant de la restituer, incrémentée, en mémoire.

Dans les exemples : on suppose que la valeur de la variable "a" est, au départ, 3.

Nom
Signe
Exemples
Pré incrémentation
++ a
(5 * ++a) égale 20;
ensuite a égale 4;
Post incrémentation
a ++
(5 * a++) égale 15;
ensuite a égale 4;
Pré décrémentation
-- a
(5 * --a) égale 10;
ensuite a égale 2;
Post décrémentation
a --
(5 * a--) égale 15;
ensuite a égale 2;

Opérateurs booléens d'assertion
Opérateurs
Assertion
Opérandes a et b
a == b
a égale b
numériques
caractères
a != b a différent de b numériques
caractères
a < b
a inférieur à b
numériques
a <= b
a inférieur ou égal à b
numériques
a > b
a supérieur à b
numériques
a >= b
a supérieur ou égal à b
numériques

Opérateurs
Opération
Opérandes a et b
a && b
a et b
booléens
a || b a ou b booléens
!a non a booléen

 

Exercice d'application
Conversion d'une chaîne en minuscules ou en majuscules

Prérequis : Définition des Tableaux, initialisation - Chaînes de caractères. -

#include <stdio.h>

int main()
{
;char Chaine[7]={'B','o','n','j','o','u','r',0};
;
;int i = 0;
;while(Chaine[i])
;{
;;Chaine[i] = Chaine[i] | 0x20;
; putchar(Chaine[i]);
; i++;
;}

;return 0
}

Ce programme convertit toute la chaîne en minuscules. Explications :
Il suffit de regarder le tableau des valeurs numériques des caractres ASCII
pour y voir que les majuscules et les minuscules ne diffèrent que par le bit B5.
Ce bit est nul pour les majuscules et égal à un pour les minuscules.

On peut donc obtenir une minuscule en masquant une majuscule par l'octet 00100000 en binaire
ce qui correspond à la valeur "20"
en hexadécimal, qui s'écrit 0x20 en langage C.

Donc :
minuscule = majuscule ! 0x20;
Nous rappelons ici que l'opérateur " | " est l' opérateur "OU" bit à bit
du langage C.

Allons plus loin, 0x20 est le code ASCII de l'espace qui s'écrit : ' ' (soit deux apostrophes séparées par un espace).
Donc :
minuscule = majuscule |' ';

Enfin, si "lettre" désigne un identificateur de caractère, elle sera systématiquement transformée en minuscule par l'opération :
lettre = lettre |' ';
Ou, mieux encore par (voir opérateurs d'affectation):

lettre|=' ';

On vous laisse le soin de montrer que la transformation en majuscule se fait par :

lettre&=~' ';

Nous rappelons que le "tilde" ~ est l'opérateur de complémentation bit à bit du langage C,
et que le '&' en est l'
opérateur ET bit à bit .

#include <stdio.h>

int main()
{
;char Chaine[7]={'B','o','n','j','o','u','r',0};
;
;int i = 0;
;while(Chaine[i])
;{
;;Chaine[i]|=' ';
; putchar(Chaine[i]); //Tout en minuscules
; i++; //Voir autoincrémentation
;}
;putchar('\n'); //A la ligne

;i=0;
;
while(Chaine[i])
; putchar(Chaine[i++]&=~' '); //Tout en majuscules

;putchar('\n');

;return 0
}

Observez comment on est arrivé à réduire le code en insérant les opérations :

  • D'abord :
    Chaine[i]&=~' ';
    putchar(Chaine[i]);
    peut se réduire à :
    putchar(Chaine[i]&=~' ');
  • Ensuite : la postincémentation de i peut s'insérer dans :
    putchar(Chaine[i++]&=~' ');


La suite Modules & Librairies
Sommaire langage C - C++

Accueil

du site