Une introduction aux opérateurs C et à la priorité des opérateurs
C nous offre une grande variété d'opérateurs que nous pouvons utiliser pour opérer sur des données.
En particulier, nous pouvons identifier différents groupes d'opérateurs:
- opérateurs arithmétiques
- opérateurs de comparaison
- Opérateurs logiques
- opérateurs d'affectation composés
- opérateurs au niveau du bit
- aiguilleles opérateurs
- opérateurs de structure
- opérateurs divers
Dans cet article de blog, je vais tous les détailler, en utilisant 2 variables imaginairesa
etb
comme exemples.
Je garde les opérateurs bit à bit, les opérateurs de structure et les opérateurs de pointeur hors de cette liste, car je leur dédierai un article de blog spécifique.
Opérateurs arithmétiques
Dans ce groupe de macros, je vais séparer les opérateurs binaires et les opérateurs unaires.
Les opérateurs binaires fonctionnent avec deux opérandes:
Opérateur | Nom | Exemple |
---|---|---|
= |
Mission | a = b |
+ |
Une addition | a + b |
- |
Soustraction | a - b |
* |
Multiplication | a * b |
/ |
Division | a / b |
% |
Modulo | a % b |
Les opérateurs unaires ne prennent qu'un seul opérande:
Opérateur | Nom | Exemple |
---|---|---|
+ |
Unaire plus | +a |
- |
Moins unaire | -a |
++ |
Incrément | a++ ou++a |
-- |
Décrémenter | a-- ou--a |
La différence entrea++
et++a
est-cea++
incrémente lea
variable après son utilisation.++a
incrémente lea
variable avant de l'utiliser.
Par exemple:
int a = 2;
int b;
b = a++ /* b is 2, a is 3 */
b = ++a /* b is 4, a is 4 */
La même chose s'applique à l'opérateur de décrémentation.
Opérateurs de comparaison
Opérateur | Nom | Exemple |
---|---|---|
== |
Opérateur égal | a == b |
!= |
Opérateur différent | a != b |
> |
Plus grand que | a > b |
< |
Moins que | a < b |
>= |
Plus grand ou égal à | a >= b |
<= |
Inférieur ou égal à | a <= b |
Opérateurs logiques
!
NOT (exemple:!a
)&&
ET (exemple:a && b
)||
OU (exemple:a || b
)
Ces opérateurs sont parfaits pour travailler avec des valeurs booléennes.
Opérateurs d'affectation composés
Ces opérateurs sont utiles pour effectuer une affectation et en même temps effectuer une opération arithmétique:
Opérateur | Nom | Exemple |
---|---|---|
+= |
Affectation d'addition | a += b |
-= |
Affectation de soustraction | a -= b |
*= |
Affectation de multiplication | a *= b |
/= |
Affectation de la division | a /= b |
%= |
Affectation modulo | a %= b |
Opérateurs divers
L'opérateur ternaire
L'opérateur ternaire est le seul opérateurCcela fonctionne avec 3 opérandes, et c'est un moyen court d'exprimer des conditions.
Voici à quoi ça ressemble:
<condition> ? <expression> : <expression>
Exemple:
a ? b : c
Sia
est évalué àtrue
, puis leb
l'instruction est exécutée, sinonc
est.
L'opérateur ternaire est fonctionnellement identique à un conditionnel if / else, sauf qu'il est plus court à exprimer et qu'il peut être inséré dans une expression.
taille de
Lesizeof
L'opérateur renvoie la taille de l'opérande que vous passez. Vous pouvez passer une variable, voire un type.
Exemple d'utilisation:
#include <stdio.h>
int main(void) {
int age = 37;
printf("%ld\n", sizeof(age));
printf("%ld", sizeof(int));
}
Priorité des opérateurs
Avec tous ces opérateurs (et plus, que je n'ai pas abordés dans cet article, y compris les opérateurs de structure au niveau du bit et les opérateurs de pointeur), nous devons faire attention lorsque vous les utilisez ensemble dans une seule expression.
Supposons que nous ayons cette opération:
int a = 2;
int b = 4;
int c = b + a * a / b - a;
Quelle est la valeur dec
? Est-ce que l'addition est exécutée avant la multiplication et la division?
Il existe un ensemble de règles qui nous aident à résoudre ce casse-tête.
Pour passer de moins de priorité à plus de priorité, nous avons:
- le
=
opérateur d'assignation - le
+
et-
binaireles opérateurs - le
*
et/
les opérateurs - le
+
et-
opérateurs unaires
Les opérateurs ont également une règle d'associativité, qui est toujours de gauche à droite, à l'exception des opérateurs unaires et de l'affectation.
Dans:
int c = b + a * a / b - a;
Nous exécutons d'aborda * a / b
, qui en raison d'être de gauche à droite, nous pouvons nous séparer ena * a
et le résultat/ b
:2 * 2 = 4
,4 / 4 = 1
.
Ensuite, nous pouvons effectuer la somme et la soustraction: 4 + 1 - 2. La valeur dec
est3
.
Dans tous les cas, cependant, je veux m'assurer que vous comprenez que vous pouvez utiliser des parenthèses pour rendre toute expression similaire plus facile à lire et à comprendre.
Les parenthèses ont une priorité plus élevée sur toute autre chose.
L'exemple d'expression ci-dessus peut être réécrit comme suit:
int c = b + ((a * a) / b) - a;
et nous ne devons pas trop y penser.
Téléchargez mon gratuitManuel C
Plus de tutoriels clang:
- Introduction au langage de programmation C
- C Variables et types
- Constantes C
- Opérateurs C
- C Conditionnels
- Comment travailler avec des boucles en C
- Introduction aux tableaux C
- Comment déterminer la longueur d'un tableau en C
- Introduction aux chaînes C
- Comment trouver la longueur d'une chaîne en C
- Introduction aux pointeurs C
- Boucle à travers un tableau avec C
- Booléens en C
- Introduction aux fonctions C
- Comment utiliser NULL en C
- Concepts d'E / S de base en C
- Guillemets doubles vs guillemets simples en C
- Comment renvoyer une chaîne à partir d'une fonction C
- Comment résoudre l'avertissement de fonction de bibliothèque déclarant implicitement dans C
- Comment vérifier une valeur de caractère en C
- Comment imprimer le caractère de pourcentage en utilisant `printf ()` en C
- Spécificateurs et modificateurs de conversion C
- Comment accéder aux paramètres de ligne de commande en C
- Portée des variables en C
- Pouvez-vous imbriquer des fonctions dans C?
- Variables statiques en C
- Variables globales C
- Le mot-clé typedef en C
- C Types énumérés
- Structures C
- Fichiers d'en-tête C
- Le préprocesseur C