Cours de C++ -- 2. Opérateurs en C++
Nous allons voir à présent les opérateurs du C++. Il s’agit évidemment de répertorier les principales opérations mathématiques et logiques que permet le C++. Bonne Lecture !
Faire des commentaires en C++
Un bon programme est un programme commenté, ne l’oubliez jamais !!! Cela fait parti des commandements du bon programmeur !!! Alors comment commenter un programme ? Pour commenter un programme, il existe deux méthodes:
- pour faire un commentaire sur une ligne on utilise //
- pour faire un commentaire sur une ou plusieurs ligne on utilise /* en début de commentaire et */ en fin de commentaire. Voici un exemple:
Les opérateurs d’assignation = et ()
L’opérateur = permet d’attribuer une valeur à l’opérande de gauche (communément appelé lvalue). Dans l’exemple suivant:
p est l’opérande de gauche et 3.71 est la valeur qu’on lui attribue (rvalue). La commande qui suit
renverra une erreur lors de la compilation, puisque 3 n’est pas une variable, autrement dit l’assignation d’une valeur à une variable n’est pas symétrique comme en mathématique.
Pour assigner une valeur à une variable , on utilise également l’opérateur ():
Les opérateurs booléens
Nous avons vu précédemment la définition d’opérateurs booléens. Rappelez vous il existe en C++ 6 opérateurs nécessitant 2 opérandes:
- un opérande de gauche
- un opérateur de droite
Opérateur | Sigification | Exemple | Résultat |
---|---|---|---|
== | égal à | 2==3 | 0 |
!= | différent de | 2!=3 | 1 |
< | strictement inférieur à | 2<3 | 1 |
> | strictement supérieur à | 2>3 | 0 |
<= | inférieur ou égal à | 2<=2 | 1 |
>= | supérieur ou égal à | 2>=0 | 1 |
Voici un exemple de définition de booléen:
b1 et b2 sont deux booléens de même valeur à savoir 0 puisque les variables a et b ne sont pas égales. Rappelez-vous il existe deux manières d’initialiser une variable:
- l’opérateur () utilisé pour définir b1 par exemple
- l’opérateur = pour définir b2
Remarque. à‰vitez de confondre les opérateurs = et ==. Vous seriez bien surpris: s’il l’on définit un booléen b3 comme suit:
alors b3 vaut 1 !!! Pourquoi ? a=b entraine que a vaut 2, cela veut dire donc que b3 est initialisé à 2, donc b3 vaut 1 puisqu’un booléen ne peut prendre que les valeurs 0 ou 1, car un booléen de valeur entière non nulle vaut toujours 1. (cf introduction). On voit donc qu’au final que les opérateurs = et == n’ont pas du tout la même signification. Donc faites très attention !!!
Les opérateurs mathématiques classiques
Il existe en C++ cinq opérateurs mathématiques de base. Il s’agit des opérateurs arithmétiques suivant:
- l’addition +
- la soustraction -
- la multiplication *****
- la division /
- le modulo % pour les nombres entiers, a%b est le reste de la division entière de a par b
Ce sont des opérateurs arithmétiques, ils possèdent donc les propriétés de priorité classique des mathématiques. à€ noter, que l’on est dans l’obligation d’indiquer ces opérateurs, il arrive parfois qu’en mathématique, on omette le signe de multiplication, en C++ on doit à tout pris le mettre !!! Par exemple
entrainera une erreur de compilation, il est plus correct de mettre
Remarque. Faites attention lorsque vous utilisez l’opérateur de division /; en effet l’instruction suivante
initialise la variable a à 1. à€ 1 car rappellez vous, a est un entier certes, mais la raison est que 3 et 2 sont des entiers, et a fortirori la division entière de 3 par 2 (le quotient si vous préférez !!!) est 1.
affichera 1 … Eh oui, 3 et 2 sont considérés comme des entiers et donc 3/2=1 (en C++) , donc a vaut 1. Pour pallier à ce genre de problème, lorsque vous manipulez des réels de type float ou double par exemple, utilisez la ponctuation numérique:
le résultat est bien 1.5. Donc n’oubliez pas, utilisez le point lorsque vous avez des objets numériques autres que des entiers, écrivez 2. ou 2.0 au lieu de 2.
Les opérateurs d’incrémentation ++ et - -
Il exsite en C++ des opérateurs ++ préfixé et suffixé. Ils permettent d’incrémenter une variable d’une unité (de 1). L’opérateur suffixé ++ est défini comme suit:
ce bout de code affichera 255. L’opérateur préfixé est lui défini de la manière suivante:
ce bout de code affichera également 255. Alors quelle est la différence ? il s’agit de l’assignation prioritaire … Regardons le code suivant:
Le résultat est le suivant:
dans le cas suffixé m++ l’assignation est prioritaire, puisque var1 vaut 254. Dans le cas préfixé, l’incrémentation est prioritaire. Toute est une question de priorité !!! à€ noter que, l’opérateur ++ est en général utilisé avec des entiers, mais rien n’empêche de l’utiliser avec d’autres types:
Il existe également un opérateur - - qui permet de retirer une unité à une variable donnée:
Le résultat est le suivant:
Assignation et opérations mathématiques en C++
Il est possible d’assigner et de faire des opérations mathématiques en même temps, c’est le cas notamment quand la rvalue et la lvalue dépendent d’une même variable. On peut par exemple remplacer le code suivant:
par
Les opérateurs +=, -=, *= et /= permettent donc de faire des opérations mathématiques et en même temps d’assigner des variables. On peut ajouter l’opérateur %= pour les entiers.
Les opérateurs logiques
Nous allons voir à présent les opérateurs logiques, ces derniers vont nous permettre de relier des expressions booléennes entre elles. Voici les principaux opérateurs logiques du C++:
Opérateur | Sigification | Exemple | Résultat |
---|---|---|---|
&& | ET(AND) | (1==1) && (2==3) | 0 |
|| | OU(OR) | (1==1) || (2==3) | 1 |
! | NON(NOT) | !(2==3) | 1 |
L’opérateur && renvoie 1 si et seulement si les deux opérandes vallent 1. L’opérateur || renvoie 1 si et seulement si au moins une des opérandes vaut 1. Enfin l’opérateur ! renvoie 1 si l’opérande est 0 et inversement il renvoie 0 s’il l’opérande est 1.
Regardons quelques exemples:
En sortie, on aura
k % 2 == 0 renvoie 1 puisque le reste de la division de k par 2 est 0, c’est une manière détournée de savoir si k est pair, et c’est le cas ici. k < 100, c’est le cas donc (1 && 1) renvoie 1 donc b=1.
Un autre exemple
En sortie, on aura
m > 1000 renvoie clairement 0, mais 3.14 renvoie 1 puisque comme 3.14 est non nul, sa valeur est converti à 1 (rappelez vous c’est au dessus !!!). Par conséquent 0 || 1 entraîne que b2=1.
Pour terminer cette section, je terminerai par une notion fondamentale dans le cadre de l’optimisation de code C++. Il s’agit de l’évaluation paresseuse (lazy evaluation). Lorsque vous avez plusieurs booléens reliés par des opérateurs logiques, une question se pose comment le compilateur évalue-t-il ces expressions ? En fait, il évalue de manière paresseuse, regardons l’exemple suivant:
le compilateur va seulement évalué (1==1) puisque c’est vrai , il ne se préocuppe pas des autres booléens puisqu’il n’y a que des opérateurs OU (||) et donc a priori il sait que le résultat sera 1 d’avance puisque il y a au moins une des expressions qui est vraie. De même que dans l’exemple suivant
il n’évaluera que (0=1) puisque c’est faux , il ne se préocuppera pas des autres expressions booléennes. Vous en convenez que dans le cadre de l’optimisation de code cela peut-être intéressant, car pour l’opérateur ||, on placera les expressions booléénnes qui ont le plus de chance d’être vraies pour augmenter la vitesse de l’exécution du code. Inversement pour l’opérateur &&, on placera les expressions booléennes qui ont le plus de chance d’être fausses.
Conclusion
Les points importants de ce chapitre sont les suivants:
- un bon programme est un programme commenté
- les opérateurs sont des objets essentiels du C++
- pour assigner une variable on utilise les opérateurs = et ()
- Ne confondez pas l’opérateur booléen == et l’opérateur d’assignation =
- il existe 5 opérateurs mathématiques en C++: +,-,*,/ et %
- Faites attention à la division entière !!!
- il existe des opérateurs d’incrémentation ++ et - - préfixés et suffixés
- l’opérateur préfixé est prioritaire sur l’opérateur d’assignation
- on peut conjuguer assignation et opération mathématiques en C++ à l’aide des opérateurs +=,-=,*=,/=, %=; %= étant exclusivement dédié aux entiers
- les opérateurs logiques et leur évaluation paresseuse
Le prochain chapitre traitra des structures de contrôle du C++.
Si vous avez trouvé cet article ou ce site utile et souhaitez soutenir notre travail, veuillez envisager de faire un don. Merci !
Aidez-nousArticles dans la même rubrique
- Cours de C++ -- 2. Opérateurs en C++
- Cours de C++ -- 1. Introduction au C++
- C++
- apahe/
- apahe/php/
- /faq-c/
- /faq-c/c-extra/
-
/faq-c/faq-c-gcc-g/
- Undefined Symbol ___gxx_personality_v0
- gcc /g++ Why some variables are not detected as not used during compilation?
- gcc / g++ preprocessor flags for the compiler version number
- gcc / g++ how to dump all preprocessor definitions
- gcc / g++ find where a header file is included from
- g++ compilation option -Weffc++
- Disable all gcc / g++ warnings
- Code that compiles with gcc but not g++
- Build in release mode with full optimizations in gcc / g++
- C++ - Faq C++ GCC G++
- /faq-c/faq-c-stl/
-
linux/ommande-du-jour/
- Trouver les processus consommant le plus de cpu/mémoire à l'aide de la commande ps
- Trouver/déterminer les options avec lesquelles python a été compilé
- Trouver/déterminer la version de numpy de numpy que j'utilise
- Télécharger de la musique et des vidéos .mp3, .wma, .avi, .mpg , divx avec google
- Taille du disque et de répertoire: df du
- SVN -- Comment ignorer des fichiers ou des répertoires avec subversion?
- Rechercher un fichier: locate, find et which
- Quelle est la version de mon noyau Linux : uname
- Programmation des actions(tâches) régulières: crontab
- phpMyAdmin: rechercher et remplacer dans une base MySQL
- Ouverture et fermeture de session: login, logout et password
- Nombre de lignes, de mots d'un fichier: wc
- Linux Comment supprimer une imprimante en ligne de commande
- Linux comment se connecter à Windows via remote desktop RDP en CentOS 7 / RedHat 7
- Lancer une commande un jour donné, à une heure donnée: at
- How to shut down or reboot: shutdown command
- Historique des commandes: history
- Faire un diff sur des fichiers distants en utilisant ssh
- Effacer l'écran et enlever certains caractères bizarres: clear reset
- Comment synchroniser les données mémoire sur le disque: sync
- Comment générer des certificats auto-signés OpenSSL sous Linux CentOs/RedHat pour Apache/httpd
- Comment faire un déni de service en BASH à l'aide de fork ?
- Comment éteindre ou redémarrer son pc: shutdown
- Comment définir un timeout lors d'une tentative de connexion SSH ?
- Comment chiffrer/déchiffrer un fichier ou un répertoire sous Linux?
- Chronométrer une tâche: time
- Archivage et compression de données: tar
- Affichage du calendrier en ligne de commande: cal
- Accélérer le processus de compilation et de build avec GNU make
- Accéder à une page de manuel: man
- Linux - Commande du jour
- linux/logiiels/
- matematia-pt/
- matematia-pt/derivada-de-funcao/
- matematia/derivada-de-funcao/
- matematia-pt/limites-de-funções-matemáticas/
- matematia-pt/métodos-de-integração-numérica/
- matematia-pt/resolução-de-sistemas-lineares/
- matematia-pt/trigonometria/
- matematia/
- matematia/derivata-di-funzioni/
- matematia/limiti-di-funzioni/
- matematia/trigonometria/
- matematias/
- matematias/derivada-de-funciones/
- matematias/limites/
- matematias/trigonometria/
- mathematis-arabic/derivative-of-a-function-arabic/
- mathematis-arabic/limits-arabic/
- mathematis-arabic/linear-systems-arabic/
- mathematis-arabic/numerical-integration-arabic/
- mathematis-arabic/trigonometry-arabic/
- mathematis/
-
mathematis/derivative-of-a-function/
- Derivative of x power n
- Derivative of u/v
- Derivative of u*v , u times v
- Derivative of tan x
- Derivative of square root of x
- Derivative of sin x
- Derivative of ln x
- Derivative of ln u
- Derivative of inverse functions
- Derivative of exp x, e^x
- Derivative of exp(u) , exp(u(x))
- Derivative of cos x
- Derivative of argsinh(x)
- Derivative of arctan x
- Derivative of arcsin x
- Derivative of arccos x
- Derivative of 1/x
- Derviative of 1/u
- Chain rule proof - derivative of a composite function
- Mathematics - Derivative of a function
- mathematis/derivative-of-function/
- mathematis/group-theory/
- mathematis/group-theory/exercises/
- mathematis/interpolation/
- mathematis/limits/
- mathematis/linear-systems/
- mathematis/numerical-integration/
- mathematis/numerical-solution-of-nonlinear-equations/
- mathematis/taylor-series-expansion/
-
mathematis/trigonometry/
- Trigonometry addition formula sinh(x + y) = sinh x cosh y +cosh x sinh y
- Trigonometry addition formula sinh(x - y) = sinh x cosh y - cosh x sinh y 8080624
- Trigonometry addition formula sin(a-b)=sin a cos b - sin b cos a
- Trigonometry addition formula sin(a+b)=sin a cos b + cos a sin b
- Trigonometry addition formula cosh(x + y) = cosh x cosh y +sinh x sinh y
- Trigonometry addition formula cosh(x - y) = cosh x cosh y - sinh x sinh y 8080622
- Trigonometry addition formula cos(a+b)=cos a cos b - sin a sin b
- Trigonometry addition formula cos(a-b)=cos a cos b + sin a sin b 8080598
- Trigonometric formula sin(2x)=2 sin x cos x
- Tangent is an odd function tan(-x)=-tan x
- Sine is an odd function sin(-x)=-sin x
- Demonstration / proof of cos²x + sin²x=1
- Cosine is even function cos(-x)=cos x
- Mathematics - Trigonometry
- mathematik/grenzwerte-mathematisher-funktionen/
- mathematik/numerishe-integrationsmethoden/
-
mathematiques/derivee-de-fontion/
- Dérivée de x puissance n
- Dérivée de u/v
- Dérivée de u*v, u fois v
- Dérivée de tan x
- Dérivée de sin x
- Dérivée de racine de x
- Dérivée de ln x
- Dérivée de ln u
- Dérivée de fonction réciproque
- Dérivée de fonction composée
- Dérivée de exp x, e^x
- Dérivée de exp(u)
- Dérivée de cos x
- Dérivée de cos(u)
- Dérivée de argsinh x
- Dérivée de arctan x
- Dérivée de arcsin x
- Dérivée de arccos x
- Dérivée de a^x, a puissance x
- Dérivée de 1/x
- Dérivée de 1/u
- Mathématiques - Dérivée de fonction