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 | ||
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/02/2023 21:09] agp91 [Opérateurs, priorités] |
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [26/04/2023 19:29] (Version actuelle) bendia [Les opérateurs bit-à-bit] Supression lien vers tuto en chantier inexistant |
||
---|---|---|---|
Ligne 78: | Ligne 78: | ||
* De la base 11 à la base 36, les lettres minuscules ou majuscules peuvent être utilisées indifféremment. | * De la base 11 à la base 36, les lettres minuscules ou majuscules peuvent être utilisées indifféremment. | ||
* De la base 37 à la base 64, les lettres minuscules, majuscules, @ et _ sont à utiliser dans cet ordre. | * De la base 37 à la base 64, les lettres minuscules, majuscules, @ et _ sont à utiliser dans cet ordre. | ||
+ | |||
+ | Exemple : | ||
+ | <code user> | ||
+ | echo $(( 2#101010 )) # Nombre binaire (base 2) | ||
+ | </code><code> | ||
+ | 42 | ||
+ | </code> | ||
===== Les opérateurs arithmétiques ===== | ===== Les opérateurs arithmétiques ===== | ||
Ligne 85: | Ligne 92: | ||
^ Opérateurs ^ Désignations ^ Résultats ^ | ^ Opérateurs ^ Désignations ^ Résultats ^ | ||
| Opérateurs unaires ||| | | Opérateurs unaires ||| | ||
- | | **''+''** //expr// | Signe positif | Valeur de //expr// | | + | | **''+''** //expr// | Signe positif | Valeur de //expr// | |
- | | **''-''** //expr// | Signe négatif | Opposé de //expr// | | + | | **''-''** //expr// | Signe négatif | Opposé de //expr// | |
| Opérateurs binaires ||| | | Opérateurs binaires ||| | ||
- | | //expr1// **''+''** //expr2// | Addition | //expr2// ajouté à //expr1// | | + | | //expr1// **''+''** //expr2// | Addition | //expr2// ajouté à //expr1// | |
- | | //expr1// **''-''** //expr2// | Soustraction | //expr2// retiré de //expr1// | | + | | //expr1// **''-''** //expr2// | Soustraction | //expr2// retiré de //expr1// | |
- | | //expr1// **''*''** //expr2// | Multiplication| //expr1// multiplié par //expr2// | | + | | //expr1// **''*''** //expr2// | Multiplication | //expr1// multiplié par //expr2// | |
- | | //expr1// **''/''** //expr2// | Division | //expr1// divisé par //expr2// | | + | | //expr1// **''/''** //expr2// | Division | //expr1// divisé par //expr2// | |
- | | //expr1// **''%''** //expr2// | Modulo | Reste de la division de //expr1// par //expr2// | | + | | //expr1// **''%''** //expr2// | Modulo | Reste de la division de //expr1// par //expr2// | |
- | | //expr1// **''<nowiki>**</nowiki>''** //expr2//| Puissance | //expr1// multiplié par lui-même //expr2// fois | | + | | //expr1// **''<nowiki>**</nowiki>''** //expr2// | Puissance | //expr1// multiplié par lui-même //expr2// fois | |
- | + | | //expr//, //expr1// et //expr2//, sont sujettes au remplacement des paramètres (et des variables), à la substitution de commandes et à la suppression des protections. |||Exemples : | |
- | Exemples : | + | |
<code user> | <code user> | ||
Ligne 150: | Ligne 156: | ||
| //var// **''|=''** //expr// | Affectation par le OU 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// | | | //var// **''^=''** //expr// | Affectation par le OU exclusif binaire | //var// = //var// <nowiki>^</nowiki> //expr// | | ||
- | + | | //expr//, est sujette au remplacement des paramètres (et des variables), à la substitution de commandes et à la suppression des protections. |||Exemples : | |
- | Exemples : | + | |
<code user> | <code user> | ||
Ligne 240: | Ligne 245: | ||
| //expr1// **''<nowiki>&&</nowiki>''** //expr2// | ET logique | 1 <nowiki>&&</nowiki> 1 = 1 (vrai ET vrai = vrai)\\ 1 <nowiki>&&</nowiki> 0 = 0 (vrai ET faux = faux)\\ 0 <nowiki>&&</nowiki> 1 = 0 (faux ET vrai = faux)\\ 1 <nowiki>&&</nowiki> 1 = 0 (faux ET faux = faux) | | | //expr1// **''<nowiki>&&</nowiki>''** //expr2// | ET logique | 1 <nowiki>&&</nowiki> 1 = 1 (vrai ET vrai = vrai)\\ 1 <nowiki>&&</nowiki> 0 = 0 (vrai ET faux = faux)\\ 0 <nowiki>&&</nowiki> 1 = 0 (faux ET vrai = faux)\\ 1 <nowiki>&&</nowiki> 1 = 0 (faux ET faux = faux) | | ||
| //expr1// **''<nowiki>||</nowiki>''** //expr2// | OU logique | 1 <nowiki>&&</nowiki> 1 = 1 (vrai OU vrai = vrai)\\ 1 <nowiki>&&</nowiki> 0 = 1 (vrai OU faux = vrai)\\ 0 <nowiki>&&</nowiki> 1 = 1 (faux OU vrai = vrai)\\ 0 <nowiki>&&</nowiki> 0 = 0 (faux OU faux = faux) | | | //expr1// **''<nowiki>||</nowiki>''** //expr2// | OU logique | 1 <nowiki>&&</nowiki> 1 = 1 (vrai OU vrai = vrai)\\ 1 <nowiki>&&</nowiki> 0 = 1 (vrai OU faux = vrai)\\ 0 <nowiki>&&</nowiki> 1 = 1 (faux OU vrai = vrai)\\ 0 <nowiki>&&</nowiki> 0 = 0 (faux OU faux = faux) | | ||
- | | //epr//, //expr1//, //expr2// sont sujets aux développements||| | + | | //expr//, //expr1// et //expr2//, sont sujettes au remplacement des paramètres (et des variables), à la substitution de commandes et à la suppression des protections. ||| |
Exemples : | Exemples : | ||
Ligne 363: | Ligne 368: | ||
| //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 à 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 | Renvoie 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||| | + | | //expr//, //expr1// et //expr2//, sont sujettes au remplacement des paramètres (et des variables), à la substitution de commandes et à la suppression des protections. ||| |
Exemples | Exemples | ||
Ligne 375: | Ligne 380: | ||
168 | 168 | ||
</code> | </code> | ||
- | |||
- | Voir aussi : | ||
- | |||
- | * [[atelier:chantier:bash:operations-les-nombres-binaires|Opérations sur les nombres binaires]] | ||
===== Les opérateurs conditionnels ===== | ===== Les opérateurs conditionnels ===== | ||
Ligne 407: | Ligne 408: | ||
<code user> | <code user> | ||
a=42 b=10 | a=42 b=10 | ||
- | echo $((a ? b > 0 ? 100 : -100 : 24 )) | + | echo $(( a ? b > 0 ? 100 : -100 : 24 )) |
b=-10 | b=-10 | ||
- | echo $((a ? b > 0 ? 100 : -100 : 24 )) | + | echo $(( a ? b > 0 ? 100 : -100 : 24 )) |
a=0 | a=0 | ||
- | echo $((a ? b > 0 ? 100 : -100 : 24 )) | + | echo $(( a ? b > 0 ? 100 : -100 : 24 )) |
unset a b | unset a b | ||
Ligne 423: | Ligne 424: | ||
<code user> | <code user> | ||
- | echo $((24<42 ? (b > 0 ? 100 :-100) : 24 )) | + | echo $(( a ? (b > 0 ? 100 :-100) : 24 )) |
</code><code> | </code><code> | ||
24 | 24 | ||
Ligne 446: | Ligne 447: | ||
===== Priorités des opérateurs ===== | ===== Priorités des opérateurs ===== | ||
- | La priorité des opérateurs précise l'ordre dans lequel les opérations sont effectués dans une expression complexe.\\ | + | La priorité des opérateurs précise l'ordre dans lequel les opérations sont effectuées dans une expression complexe.\\ |
L'associativité permet de définir l'ordre des opérations pour les opérateurs de même priorité.\\ | L'associativité permet de définir l'ordre des opérations pour les opérateurs de même priorité.\\ | ||
- | La priorité et l'associativité des opérateurs des commande **let** et **<nowiki>((...))</nowiki>** sont identique au langage C. | + | La priorité et l'associativité des opérateurs des commande **let** et **<nowiki>((...))</nowiki>** sont identiques au langage C. |
| Priorités et associativité des opérateurs ||| | | Priorités et associativité des opérateurs ||| | ||
^ Opérateurs ^ Désignations ^ Associativités ^ | ^ Opérateurs ^ Désignations ^ Associativités ^ | ||
| Les priorités sont classé ci-dessous par ordre décroissant.\\ Sur une même ligne, les opérateurs ont même priorité. ||| | | Les priorités sont classé ci-dessous par ordre décroissant.\\ Sur une même ligne, les opérateurs ont même priorité. ||| | ||
- | | **''(''**...**'')''** | Parenthèses || | + | | **''(''**...**'')''** | Parenthèses | | |
- | | expr**''++''** expr**''--''** | Post-incrément et post-décrément de variables | -> | | + | | expr**''++''** expr**''--''** | Post-incrément et post-décrément de variables | -> | |
- | | **''-''** **''+''** | Moins et plus unaires | <- | | + | | **''-''** **''+''** | Moins et plus unaires | <- | |
- | | **''++''**expr **''--''**expr | Pré-incrément et pré-décrément de variables | <- | | + | | **''++''**expr **''--''**expr | Pré-incrément et pré-décrément de variables | <- | |
- | | **''!''** **''~''** | Négations logique et binaire | <- | | + | | **''!''** **''~''** | Négations logique et binaire | <- | |
| **''<nowiki>**</nowiki>''** | Exponentiation (puissance) | | | | **''<nowiki>**</nowiki>''** | Exponentiation (puissance) | | | ||
- | | **''*''** **''/''** **''%''** | Multiplication, division, modulo | -> | | + | | **''*''** **''/''** **''%''** | Multiplication, division, modulo | -> | |
- | | **''+''** **''-''** | Addition, soustraction | -> | | + | | **''+''** **''-''** | Addition, soustraction | -> | |
- | | **''<nowiki><<</nowiki>''** **''<nowiki>>></nowiki>''** | Décalage arithmétique à gauche et à droite | -> | | + | | **''<nowiki><<</nowiki>''** **''<nowiki>>></nowiki>''** | Décalage arithmétique à gauche et à droite | -> | |
- | | **''<nowiki><=</nowiki>''** **''<nowiki>>=</nowiki>''** **''<''** ***''>''** | Relationnels | -> | | + | | **''<nowiki><=</nowiki>''** **''<nowiki>>=</nowiki>''** **''<''** **''>''** | Relationnels | -> | |
- | | **''<nowiki>==</nowiki>''** **''<nowiki>!=</nowiki>''** | Egalité et différence | -> | | + | | **''<nowiki>==</nowiki>''** **''<nowiki>!=</nowiki>''** | Egalité et différence | -> | |
- | | **''&''** | ET binaire | -> | | + | | **''&''** | ET binaire | -> | |
- | | **''<nowiki>^</nowiki>''** | OU exclusif binaire | -> | | + | | **''<nowiki>^</nowiki>''** | OU exclusif binaire | -> | |
- | | **''<nowiki>|</nowiki>''** | OU binaire | -> | | + | | **''<nowiki>|</nowiki>''** | OU binaire | -> | |
- | | **''<nowiki>&&</nowiki>''** | ET logique | -> | | + | | **''<nowiki>&&</nowiki>''** | ET logique | -> | |
- | | **''<nowiki>||</nowiki>''** | OU logique | -> | | + | | **''<nowiki>||</nowiki>''** | OU logique | -> | |
- | | **''?''** **'':''** | Opérateur conditionnel | <- | | + | | **''?''** **'':''** | Opérateur conditionnel | <- | |
- | | **''=''** **''<nowiki>*=</nowiki>''** **''<nowiki>/=</nowiki>''** **''<nowiki>%=</nowiki>''** **''<nowiki>+=</nowiki>''** **''<nowiki>-=</nowiki>''** **''<nowiki><<=</nowiki>''** **''<nowiki>>>=</nowiki>''** **''<nowiki>&=</nowiki>''** **''<nowiki>^=</nowiki>''** **''<nowiki>|=</nowiki>''** | Affectations | <- | | + | | **''=''** **''<nowiki>*=</nowiki>''** **''<nowiki>/=</nowiki>''** **''<nowiki>%=</nowiki>''** **''<nowiki>+=</nowiki>''** **''<nowiki>-=</nowiki>''** **''<nowiki><<=</nowiki>''** **''<nowiki>>>=</nowiki>''** **''<nowiki>&=</nowiki>''** **''<nowiki>^=</nowiki>''** **''<nowiki>|=</nowiki>''** | Affectations | <- | |
- | | **'',''** | Virgule | -> | | + | | **'',''** | Virgule | | |
- | | Sources : Les priorités proviennent de page du manuel de bash (section ÉVALUATION ARITHMÉTIQUE), les associativités du C. ||| | + | | Sources : Les priorités proviennent de page du manuel de bash (section ÉVALUATION ARITHMÉTIQUE).\\ Les associativités du langage C. ||| |
- | Les parenthèses ont la priorité la plus haute, elles permettent d'outre passer toutes les autres. | + | Les parenthèses ont la priorité la plus haute, elles permettent d'outre-passer toutes les autres. |
Exemples : | Exemples : |