Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/02/2023 01:35] agp91 [Les opérateurs bit-à-bit] |
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/02/2023 16:37] ubub [Introduction] |
||
---|---|---|---|
Ligne 17: | Ligne 17: | ||
* ;-) | * ;-) | ||
* [[doc:programmation:shells:page-man-bash-v-les-tableaux|Les tableaux]] | * [[doc:programmation:shells:page-man-bash-v-les-tableaux|Les tableaux]] | ||
- | * [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Les caractères de transformation de parametres]] | + | * [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Les caractères de transformation de paramètres]] |
* [[doc:programmation:shells:bash-vii-globs-etendus-regex| Bash : Variables, globs étendus, ERb, ERe]] | * [[doc:programmation:shells:bash-vii-globs-etendus-regex| Bash : Variables, globs étendus, ERb, ERe]] | ||
Ligne 29: | Ligne 29: | ||
Les commandes **let** et **<nowiki>((...))</nowiki>** sont les seules commandes internes que bash dispose pour réaliser des opérations mathématiques.\\ | Les commandes **let** et **<nowiki>((...))</nowiki>** sont les seules commandes internes que bash dispose pour réaliser des opérations mathématiques.\\ | ||
- | A travers elles, bash est limité à opérer que sur des entiers signés (positifs ou négatifs).\\ | + | A travers elles, bash est limité à n'opérer que sur des entiers signés (positifs ou négatifs).\\ |
Le résultat de l'évaluation d'une expression sera toujours un entier décimal signé. | Le résultat de l'évaluation d'une expression sera toujours un entier décimal signé. | ||
- | Pour réaliser des opérations avec des nombres à virgule ou plus complexes, nous devons nous tourner vers des commandes externes tel que **bc** (non installé par défaut) ou **awk**. Ou alors utiliser d'autres langages interprétés tel que **perl**, **python**, etc (awk, perl et python sont disponibles par défaut sur les systèmes Debian). | + | Pour réaliser des opérations avec des nombres à virgule ou plus complexes, nous devons nous tourner vers des commandes externes tel que **bc** (non installé par défaut) ou **awk**. Ou alors utiliser d'autres langages interprétés tel que **perl**, **python**, etc (**awk**, **perl** et **python** sont disponibles par défaut sur les systèmes Debian). |
Avec **let** et **<nowiki>((...))</nowiki>**, la plage numérique autorisée est : **-9223372036854775808 < 0 > 9223372036854775807** | Avec **let** et **<nowiki>((...))</nowiki>**, la plage numérique autorisée est : **-9223372036854775808 < 0 > 9223372036854775807** | ||
Ligne 39: | Ligne 39: | ||
* **0**, si le résultat est inférieur ou supérieur à 0. | * **0**, si le résultat est inférieur ou supérieur à 0. | ||
- | * **1**, si le résultat est égale à 0. | + | * **1**, si le résultat est égal à 0. |
La commande **<nowiki>((...))</nowiki>** peut-être préfixée du caractère de remplacement **$** pour former la commande **<nowiki>$((...))</nowiki>**, afin d’être remplacée par l'évaluation de l’expression qu'elle contient. | La commande **<nowiki>((...))</nowiki>** peut-être préfixée du caractère de remplacement **$** pour former la commande **<nowiki>$((...))</nowiki>**, afin d’être remplacée par l'évaluation de l’expression qu'elle contient. | ||
Ligne 48: | Ligne 48: | ||
Elle est délaissée depuis la version 2.0 de bash au profit de **<nowiki>((...))</nowiki>**.\\ | Elle est délaissée depuis la version 2.0 de bash au profit de **<nowiki>((...))</nowiki>**.\\ | ||
\\ | \\ | ||
- | Pour des raisons de rétrocompatibilités, elle est toujours active dans nos bash modernes.\\ | ||
- | Mais n'est plus documentée dans la page du manuel.\\ | ||
\\ | \\ | ||
- | Viendra un jour où, **$[...]** ne sera plus. | + | <file config Extrait de la page du manuel de bash> |
+ | L'ancien format $[expression] est obsolète et sera supprimé dans les prochaines versions de bash. | ||
+ | </file> | ||
+ | \\ | ||
+ | Pour des raisons de rétrocompatibilité, elle est toujours active dans nos bash modernes.\\ | ||
+ | Mais viendra un jour où, **$[...]** ne sera plus. | ||
</note> | </note> | ||
===== Les systèmes numériques ===== | ===== Les systèmes numériques ===== | ||
- | Les expressions numériques évaluées par **let** et **<nowiki>((...))</nowiki>** peuvent contenir des nombres de différent système numérique.\\ | + | Les expressions numériques évaluées par **let** et **<nowiki>((...))</nowiki>** peuvent contenir des nombres de différents systèmes numérique.\\ |
L'évaluation des expression (le résultat) sera toujours retourné en entier décimal. | L'évaluation des expression (le résultat) sera toujours retourné en entier décimal. | ||
Ligne 113: | Ligne 116: | ||
a=42 a^2=1764 | a=42 a^2=1764 | ||
</code> | </code> | ||
+ | |||
+ | <note important> | ||
+ | La division par 0 retourne une erreur.\\ | ||
+ | \\ | ||
+ | <code user> | ||
+ | echo $((42/0)) | ||
+ | </code><code> | ||
+ | bash: 42/0 : division par 0 (le symbole erroné est « 0 ») | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
===== Les opérateurs d'affectation ===== | ===== Les opérateurs d'affectation ===== | ||
Ligne 118: | Ligne 132: | ||
| Liste des opérateurs d'affectation ||| | | Liste des opérateurs d'affectation ||| | ||
- | ^ Opérateurs ^ Désignations ^ Résultats ^ | + | ^ Opérateurs ^ Désignations ^ Résultats ^ |
| Opérateurs unaires ||| | | Opérateurs unaires ||| | ||
- | | **''++''** //var// | Ré-affectation par la pré-incrémentation à 1 | //var// = //var// + 1 puis retourne //var// | | + | | **''++''** //var// | Affectation par la pré-incrémentation à 1 | //var// = //var// + 1 puis retourne //var// | |
- | | //var// **''++''** | Ré-affectation par la post-incrémentation à 1 | Retourne //var//, puis //var// = //var// + 1 | | + | | //var// **''++''** | Affectation par la post-incrémentation à 1 | Retourne //var//, puis //var// = //var// + 1 | |
- | | **''--''** //var// | Ré-affectation par la pré-décrémentation à 1 | //var// = //var// - 1 puis retourne //var// | | + | | **''--''** //var// | Affectation par la pré-décrémentation à 1 | //var// = //var// - 1 puis retourne //var// | |
- | | //var// **''--''** | Ré-affectation par la post-décrémentation à 1 | Retourne //var//, puis //var// = //var// - 1 | | + | | //var// **''--''** | Affectation par la post-décrémentation à 1 | Retourne //var//, puis //var// = //var// - 1 | |
| Opérateurs binaires ||| | | Opérateurs binaires ||| | ||
- | | //var// **''=''** //expr// | Simple affectation | Affecte //epxr// à la variable //var//| | + | | //var// **''=''** //expr// | Simple affectation | Affecte //epxr// à la variable //var// | |
- | | //var// **''+=''** //expr// | Ré-affectation par l'incrémentation | //var// = //var// + //expr// | | + | | //var// **''+=''** //expr// | Affectation par l'incrémentation | //var// = //var// + //expr// | |
- | | //var// **''-=''** //expr// | Ré-affectation par la décrémentation | //var// = //var// - //expr// | | + | | //var// **''-=''** //expr// | Affectation par la décrémentation | //var// = //var// - //expr// | |
- | | //var// **''*=''** //expr// | Ré-affectation par la multiplication | //var// = //var// * //expr// | | + | | //var// **''*=''** //expr// | Affectation par la multiplication | //var// = //var// * //expr// | |
- | | //var// **''/=''** //expr// | Ré-affectation par la division | //var// = //var// / //expr// | | + | | //var// **''/=''** //expr// | Affectation par la division | //var// = //var// / //expr// | |
- | | //var// **''%=''** //expr// | Ré-affectation par modulo | //var// = //var// % //expr// | | + | | //var// **''%=''** //expr// | Affectation par modulo | //var// = //var// % //expr// | |
+ | | //var// **''<nowiki><<=</nowiki>''** //expr// | Ré-affectation par le décalage\\ bit-à-bit à gauche | //var// = //var// <nowiki><<</nowiki> //expr// | | ||
+ | | //var// **''<nowiki>>>=</nowiki>''** //expr// | Ré-affectation par le décalage\\ bit-à-bit à droite | //var// = //var// <nowiki>>></nowiki> //expr// | | ||
+ | | //var// **''&=''** //expr// | Affectation par le ET binaire | //var// = //var// <nowiki>&</nowiki> //expr// | | ||
+ | | //var// **''|=''** //expr// | Affectation par le OU binaire | //var// = //var// <nowiki>|</nowiki> //expr// | | ||
+ | | //var// **''^=''** //expr// | Affectation par le OU exclusif binaire | //var// = //var// <nowiki>^</nowiki> //expr// | | ||
Exemples : | Exemples : | ||
Ligne 172: | Ligne 191: | ||
* **[[doc:programmation:shells:script-bash-variables-arguments-parametres?&#variables-numeriques-et-calculs|variables numériques et calculs]]** | * **[[doc:programmation:shells:script-bash-variables-arguments-parametres?&#variables-numeriques-et-calculs|variables numériques et calculs]]** | ||
- | ===== Les opérateurs relationnels ===== | + | ===== L'opérateur virgule ===== |
- | Les opérateurs relationnels permettent la comparaison entre deux epressions numériques.\\ | + | L'opérateur virgule, permet de séparer des opérations. |
- | Voir [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique#comparaison-numerique-avec|Comparaison numérique avec ((...))]] | + | |
+ | | L'opérateur virgule ||| | ||
+ | ^ Opérateur ^ Désignation ^ Résultat ^ | ||
+ | |Opérateur binaire ||| | ||
+ | | //expr1// **'',''** //expr2// | Virgule | Sépare les opération //expr1// et //expr2// pour les réaliser à la suite. | | ||
+ | |||
+ | Exemples : | ||
- | <note important> | ||
- | Le résultat des comparaisons des opérateurs relationnels retourne une valeur booléenne.\\ | ||
- | (**vrai** en cas de succès **faux** en cas d'échec).\\ | ||
- | \\ | ||
- | Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C.\\ | ||
- | Elles numérisent **faux** avec **0** et **vrai** avec une valeur **non nulle**.\\ | ||
- | \\ | ||
- | Avec bash c'est l'inverse, **faux** est une valeur **non nulle** et **vrai** correspond à **0**.\\ | ||
- | \\ | ||
- | Il en résulte que le code retour renvoyé est l'inverse du résultat des comparaisons effectuées par **let** ou **<nowiki>((..))</nowiki>** | ||
<code user> | <code user> | ||
- | echo $((24<42)) | + | echo $(( 5+5 , 10+5 , 21+21)) |
- | ((24<42)); echo $? | + | |
</code><code> | </code><code> | ||
- | 1 | + | 42 |
- | 0 | + | </code> |
+ | Seule la dernière opération est retournée. | ||
+ | |||
+ | C'est plus utile avec des affectations : | ||
+ | <code user> | ||
+ | echo $(( a=5+5 , b=10+5 , 21+21)) | ||
+ | echo a=$a b=$b | ||
+ | unset a b | ||
+ | </code><code> | ||
+ | 42 | ||
+ | a=10 b=15 | ||
</code> | </code> | ||
- | </note> | ||
===== Les opérateurs logiques ===== | ===== Les opérateurs logiques ===== | ||
Les opérateurs logiques, réalisent des opérations sur des booléens.\\ | Les opérateurs logiques, réalisent des opérations sur des booléens.\\ | ||
- | L'algèbre de boole énumère que deux états : **vrai** et **faux**.\\ | + | L'algèbre de boole n'énumère que deux états : **vrai** et **faux**.\\ |
Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C : | Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C : | ||
* **0** est compris comme **faux**. | * **0** est compris comme **faux**. | ||
- | * Tout autres valeurs (positive ou négatives), souvent **1**, sont comprise comme **vrai**. | + | * Toutes autres valeurs (positives ou négatives), souvent **1**, sont comprises comme **vrai**. |
- | ... Dans bash, c'est le contraire (voir la note plus haut). | + | ... Dans bash, c'est le contraire (voir la note plus bas). |
- | Trois opérateurs logiques sont disponibles : 1 unaire et deux binaires. | + | Trois opérateurs logiques sont disponibles : 1 unaire et 2 binaires. |
<note important>Les opérateurs logiques ne doivent être confondus avec les opérateurs bit-à-bit.</note> | <note important>Les opérateurs logiques ne doivent être confondus avec les opérateurs bit-à-bit.</note> | ||
Ligne 231: | Ligne 254: | ||
</code> | </code> | ||
- | <note>L'opérateur de négation logique s'utilise uniquement avec des parenthèses : **!(//expr//)**.</note> | + | <note>L'opérateur de négation logique **!**) s'utilise uniquement avec des parenthèses : **!(//expr//)**.</note> |
Les opérations logiques peuvent se suivre : | Les opérations logiques peuvent se suivre : | ||
Ligne 245: | Ligne 268: | ||
</code> | </code> | ||
- | Les opérateurs **<nowiki>&&</nowiki>** et **<nowiki>||</nowiki>**, étudient leur opérande de droite (//expr2//) que si cela est pertinent : | + | Les opérateurs **<nowiki>&&</nowiki>** et **<nowiki>||</nowiki>** n'étudient l'opérande de droite (//expr2//) que si cela est pertinent : |
<code user> | <code user> | ||
Ligne 260: | Ligne 283: | ||
</code> | </code> | ||
- | <note>Nous avons placer l'affection **a=10** entre parenthèse **(a=10)** pour la protéger contre la priorités des opérateurs.\\ | + | <note>Nous avons placé l'affection **a=10** entre parenthèses **(a=10)**, pour la protéger contre la priorité des opérateurs.\\ |
\\ | \\ | ||
- | Si non, l'opérateur **<nowiki>&&</nowiki>** étant prioritaire à l'opérateur **=**, les opérations effectués sont **<nowiki>0 && a</nowiki>**, puis **=10**, ce qui va générer une erreur. | + | Sinon, l'opérateur **<nowiki>&&</nowiki>** étant prioritaire à l'opérateur d'affectation **=**, les opérations effectuées deviennent **<nowiki>0 && a</nowiki>**, puis **=10**, ce qui génère une erreur. |
\\ | \\ | ||
<code user> | <code user> | ||
Ligne 270: | Ligne 293: | ||
</code> | </code> | ||
- | Voir plus bas. | + | Voir plus bas [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques#priorités-des-operateurs|les priorités des opérateurs]]. |
</note> | </note> | ||
- | S'il n'est pas pertinent d'étudier l'opérande de droite et qu'il existe un autre opérateur, alors les opération se poursuive. | + | S'il n'est pas pertinent d'étudier l'opérande de droite et qu'il existe d'autres opérateurs, alors les opérations se poursuivent. |
<code user> | <code user> | ||
a=0 | a=0 | ||
- | echo $((a && (a=10) || (a=20) )) a=$a # Avec a=0 (faux) et l'opérateur && il n'est pertinent d'étudier le second opérande | + | echo $((a && (a=10) || (a=20) )) a=$a # Avec a=0 (faux) et l'opérateur &&, il n'est pas pertinent d'étudier le second opérande |
# L'opération se reporte sur l'opérateur ||, étant pertinent, son opérande de droite est étudié. | # L'opération se reporte sur l'opérateur ||, étant pertinent, son opérande de droite est étudié. | ||
a=1 | a=1 | ||
Ligne 287: | Ligne 311: | ||
<note important> | <note important> | ||
- | Le opération logiques retournent une valeur booléenne.\\ | + | Les opérations logiques retournent une valeur booléenne.\\ |
- | (**vrai** en cas de succès **faux** en cas d'échec).\\ | + | |
\\ | \\ | ||
Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C.\\ | Les commandes **let** et **<nowiki>((..))</nowiki>** suivent le standard C.\\ | ||
Ligne 295: | Ligne 318: | ||
Avec bash c'est l'inverse, **faux** est une valeur **non nulle** et **vrai** correspond à **0**.\\ | Avec bash c'est l'inverse, **faux** est une valeur **non nulle** et **vrai** correspond à **0**.\\ | ||
\\ | \\ | ||
- | Il en résulte que le code retour renvoyé est l'inverse du résultat des comparaisons effectuées par **let** ou **<nowiki>((..))</nowiki>** | + | Il en résulte que le code retour renvoyé est l'inverse du résultat des opérations logiques effectuées par **let** ou **<nowiki>((..))</nowiki>** |
<code user> | <code user> | ||
echo $(( !(0) )) | echo $(( !(0) )) | ||
Ligne 303: | Ligne 326: | ||
0 | 0 | ||
</code> | </code> | ||
+ | </note> | ||
+ | |||
+ | ===== Les opérateurs relationnels ===== | ||
+ | |||
+ | Les opérateurs relationnels permettent la comparaison entre deux epressions numériques.\\ | ||
+ | Voir [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique#comparaison-numerique-avec|Comparaison numérique avec ((...))]] | ||
+ | |||
+ | <note important> | ||
+ | Comme avec les opérateurs logiques, le résultat des comparaisons des opérateurs relationnels retourne une valeur booléenne.\\ | ||
+ | (**vrai** en cas de succès **faux** en cas d'échec).\\ | ||
+ | \\ | ||
+ | Le code de retour renvoyé est donc contraire au résultat des comparaisons effectuées par **let** ou **<nowiki>((..))</nowiki>** | ||
+ | <code user> | ||
+ | echo $((24<42)) | ||
+ | ((24<42)); echo $? | ||
+ | </code><code> | ||
+ | 1 | ||
+ | 0 | ||
+ | </code> | ||
+ | </note> | ||
===== Les opérateurs bit-à-bit ===== | ===== Les opérateurs bit-à-bit ===== | ||
Les opérateurs bit-bit, opèrent sur des nombres binaires (une suite de 0 ou de 1).\\ | Les opérateurs bit-bit, opèrent sur des nombres binaires (une suite de 0 ou de 1).\\ | ||
- | Les nombres sont d'abords convertis en binaire, l’opération est appliquée, puis le résultat est reconverti en décimal. | + | Les nombres sont d'abord convertis en binaire, l’opération est appliquée, puis le résultat est reconverti en décimal. |
- | <note important>Les opérateurs bit-à-bit ne doivent être confondus avec les opérateurs logiques</note> | + | <note important>Les opérateurs bit-à-bit ne doivent pas être confondus avec les opérateurs logiques</note> |
| Liste des opérateurs bit-à-bit ||| | | Liste des opérateurs bit-à-bit ||| | ||
^ Opérateurs ^ Désignations ^ Résultats ^ | ^ Opérateurs ^ Désignations ^ Résultats ^ | ||
| Opérateur unaire ||| | | Opérateur unaire ||| | ||
- | | **''~''** //expr// | Négation binaire | Retourne le complément à 1 de //expr//\\ (~1 -> 0 ; ~0 -> 1) | | + | | **''~''** //expr// | Négation binaire | Renvoie le complément à 1 de //expr//\\ (~1 -> 0 ; ~0 -> 1) | |
| Opérateurs binaires ||| | | Opérateurs binaires ||| | ||
- | | //expr1// **''&''** //expr2// | ET binaire | Retourne le ET bit-à-bit entre //expr1// et //expr2//\\ (1 ET 1 -> 1 ; 0 ET 0 -> 0 ; 1 ET 0 -> 0 ; 0 ET 1 -> 0) | | + | | //expr1// **''&''** //expr2// | ET binaire | Renvoie le ET bit-à-bit entre //expr1// et //expr2//\\ (1 ET 1 -> 1 ; 0 ET 0 -> 0 ; 1 ET 0 -> 0 ; 0 ET 1 -> 0) | |
- | | //expr1// **''|''** //expr2// | OU binaire | Retourne le OU bit-à-bit entre //expr1// et //expr2//\\ (1 OU 1 -> 1 ; 0 OU 0 -> 0 ; 1 OU 0 -> 1 ; 0 OU 1 -> 1) | | + | | //expr1// **''|''** //expr2// | OU binaire | Renvoie le OU bit-à-bit entre //expr1// et //expr2//\\ (1 OU 1 -> 1 ; 0 OU 0 -> 0 ; 1 OU 0 -> 1 ; 0 OU 1 -> 1) | |
- | | //expr1// **''^''** //expr2// | OU binaire exclusif (XOR) | Retourne le OU bit-à-bit exclusif entre //expr1// et //expr2//\\ (1 XOR 1 -> 0 ; 0 XOR 0 -> 0 ; 1 XOR 0 -> 1 ; 0 XOR 1 -> 1) | | + | | //expr1// **''^''** //expr2// | OU binaire exclusif (XOR) | Renvoie le OU bit-à-bit exclusif entre //expr1// et //expr2//\\ (1 XOR 1 -> 0 ; 0 XOR 0 -> 0 ; 1 XOR 0 -> 1 ; 0 XOR 1 -> 1) | |
- | | //expr1// **''<nowiki><<</nowiki>''** //expr2//| Décalage binaire à gauche | Retourne le décalage de //expr2// bit(s) à gauche de //expr1//\\ (//expr2// 0 ajoutés(s) à droite d'//expr1//) | | + | | //expr1// **''<nowiki><<</nowiki>''** //expr2//| Décalage binaire à gauche | Renvoie le décalage de //expr2// bit(s) à gauche de //expr1//\\ (//expr2// 0 ajoutés(s) à droite d'//expr1//) | |
- | | //expr1// **''<nowiki>>></nowiki>''** //expr2//| Décalage binaire à droite | Retourne le décalage de //expr2// bit(s) à droite de //expr1//\\ (//expr2// bit(s) tronqué(s) à droite d'//expr1//) | | + | | //expr1// **''<nowiki>>></nowiki>''** //expr2//| Décalage binaire à droite | Renvoie le décalage de //expr2// bit(s) à droite de //expr1//\\ (//expr2// bit(s) tronqué(s) à droite d'//expr1//) | |
| //epr//, //expr1//, //expr2// sont sujets aux développements||| | | //epr//, //expr1//, //expr2// sont sujets aux développements||| | ||
Ligne 379: | Ligne 422: | ||
<note tip> | <note tip> | ||
En bref,\\ | En bref,\\ | ||
- | __**Post-incrémentation/décrémentation**__ : Les signes d'incrémentation (**''++''**) ou de décrémentation (**''<nowiki>--</nowiki>''**) sont placés **après** une valeur à incrémentée (+1) ou à décrémenter (-1) ; cette valeur est conservée dans "y" puis elle est **incrémentée (+1)** ou **décrémentée (-1)**.\\ | + | __**Post-incrémentation/décrémentation**__ : Les signes d'incrémentation (**''++''**) ou de décrémentation (**''<nowiki>--</nowiki>''**) sont placés **après** une valeur à incrémenter (+1) ou à décrémenter (-1) ; cette valeur est conservée dans "y" puis elle est **incrémentée (+1)** ou **décrémentée (-1)**.\\ |
- | __**Pré-incrémentation/décrémentation**__ : Les signes d'incrémentation (**''++''**) ou de décrémentation (**''<nowiki>--</nowiki>''**) sont placés **avant** une valeur à incrémentée ou à décrémenter ; cette valeur est **incrémentée (+1)** ou **décrémentée (-1)** puis elle est conservée dans "y". | + | __**Pré-incrémentation/décrémentation**__ : Les signes d'incrémentation (**''++''**) ou de décrémentation (**''<nowiki>--</nowiki>''**) sont placés **avant** une valeur à incrémenter ou à décrémenter ; cette valeur est **incrémentée (+1)** ou **décrémentée (-1)** puis elle est conservée dans "y". |
</note> | </note> | ||
=====Tuto précédent ===== | =====Tuto précédent ===== |