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 [25/02/2023 03:45] agp91 [Opérateurs arithmétiques] |
doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques [25/02/2023 14:02] agp91 [Opérateurs binaires] |
||
---|---|---|---|
Ligne 54: | Ligne 54: | ||
</note> | </note> | ||
- | ===== Les bases arithmétiques ===== | + | ===== 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érent système numérique.\\ | ||
Ligne 79: | Ligne 79: | ||
Les opérateurs arithmétiques permettent de réaliser des calculs numériques classiques. | Les opérateurs arithmétiques permettent de réaliser des calculs numériques classiques. | ||
- | | Les opérateurs arithmétiques ||| | + | | Liste des opérateurs arithmétiques ||| |
^ Opérateurs ^ Désignations ^ Résultats ^ | ^ Opérateurs ^ Désignations ^ Résultats ^ | ||
| Opérateurs unaires ||| | | Opérateurs unaires ||| | ||
Ligne 87: | Ligne 87: | ||
| //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 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 | | ||
- | =====Opérateurs d'affectation arithmétique===== | + | Exemples : |
- | ^opérateurs ^opérations ^ | + | <code user> |
- | | ''<nowiki>=</nowiki> '' | affectation arithmétique | | + | a=42 # Affecte 42 à la variable a |
- | | ''<nowiki>+=</nowiki> '' | incrémentation | | + | echo $((-a)) # Retourne l'opposé de la valeur contenue dans la variable a. |
- | | ''<nowiki>-=</nowiki> '' | décrémentation | | + | |
- | | ''<nowiki>/=</nowiki> '' | affectation par division | | + | |
- | | ''<nowiki>+=</nowiki> '' | affectation par multiplication | | + | |
- | | ''<nowiki>%=</nowiki> '' | afectation du reste | | + | |
- | **Voir :** | + | echo $((21+025)) # Retourne l’addition de l'octal 25 au décimal 21. |
+ | |||
+ | echo 3/2=$((3/2)) # Retourne 3/2 | ||
+ | echo 3/2 reste $((3%2)) # Retourne le reste de 3/2 | ||
+ | |||
+ | echo a=$a a^2=$((a**2)) # Retourne la valeur de la variable élevée à la puissance 2 | ||
+ | |||
+ | unset a | ||
+ | </code><code> | ||
+ | -42 | ||
+ | 42 | ||
+ | 3/2=1 | ||
+ | 3/2 reste 1 | ||
+ | a=42 a^2=1764 | ||
+ | </code> | ||
+ | ===== Les opérateurs d'affectation ===== | ||
+ | |||
+ | Les opérateurs d'affectation, permettent affecter une valeur à une variable ou d'en modifier la valeur. | ||
+ | |||
+ | | Liste des opérateurs d'affectation ||| | ||
+ | ^ Opérateurs ^ Désignations ^ Résultats ^ | ||
+ | | Opérateurs unaires ||| | ||
+ | | **''++''** //var// | Ré-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// | Ré-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 | | ||
+ | | Opérateurs binaires ||| | ||
+ | | //var// **''=''** //expr// | Simple affectation | Affecte //epxr// à la variable //var//| | ||
+ | | //var// **''+=''** //expr// | Ré-affectation par l'incrémentation | //var// = //var// + //expr// | | ||
+ | | //var// **''-=''** //expr// | Ré-affectation par la décrémentation | //var// = //var// - //expr// | | ||
+ | | //var// **''*=''** //expr// | Ré-affectation par la multiplication | //var// = //var// * //expr// | | ||
+ | | //var// **''/=''** //expr// | Ré-affectation par la division | //var// = //var// / //expr// | | ||
+ | | //var// **''%=''** //expr// | Ré-affectation par modulo | //var// = //var// % //expr// | | ||
+ | |||
+ | Exemples : | ||
+ | |||
+ | <code user> | ||
+ | declare -p a | ||
+ | let a=24 ; declare -p a | ||
+ | ((a=42)) ; echo a=$a | ||
+ | |||
+ | let 'a += 42' ; echo "a+=42 -> a=$a" | ||
+ | (( a /= 2 )) ; echo "a/=2 -> a=$a" | ||
+ | |||
+ | unset a | ||
+ | </code><code> | ||
+ | bash: declare: a : non trouvé | ||
+ | declare -- a="24" | ||
+ | a=42 | ||
+ | a+=42 -> a=84 | ||
+ | a/=2 -> a=42 | ||
+ | </code> | ||
+ | |||
+ | <note> | ||
+ | Contrairement à la commande **declare -i**, les commandes **let** et **<nowiki>((..))</nowiki>** ne donnent pas l'attribut numérique (**-i**) à une variable. | ||
+ | </note> | ||
+ | |||
+ | <code user> | ||
+ | declare -i b=42 | ||
+ | declare -p b | ||
+ | echo "Pré-incrémentation à 1 : Avant b=$b ; Pendant b=$((++b)) ; Après : b=$b" | ||
+ | echo "Post-décrémentation à 1 : Avant b=$b ; Pendant b=$((b--)) ; Après : b=$b" | ||
+ | |||
+ | unset b | ||
+ | </code><code> | ||
+ | declare -i b="42" | ||
+ | Pré-incrémentation à 1 : Avant b=42 ; Pendant b=43 ; Après : b=43 | ||
+ | Post-décrémentation à 1 : Avant b=43 ; Pendant b=43 ; Après : b=42 | ||
+ | </code> | ||
+ | |||
+ | Voir aussi : | ||
* **[[doc:programmation:shells:script-bash-variables-arguments-parametres?&#typologie-des-variables|typologie de variables]]** | * **[[doc:programmation:shells:script-bash-variables-arguments-parametres?&#typologie-des-variables|typologie de variables]]** | ||
* **[[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]]** | ||
- | =====Opérateurs binaires ===== | + | ===== Les opérateurs relationnels ===== |
- | Ces opérateurs s'utilisent sur des binaires, (sur des 1 et des zéro). | + | |
- | ^ Opérateurs ^ significations ^ | + | Les opérateurs relationnels permettent la comparaison entre deux epressions numériques.\\ |
- | | ''<<'' | décalage d'un bit à gauche (=mutiplication par deux) | | + | Voir [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique#comparaison-numerique-avec|Comparaison numérique avec ((...))]] |
- | | ''>>'' | décalage d'un bit à droite (=division par deux) | | + | |
- | | ''&<'' | "et" logique (ex : on a une variable=1; si on fait &1 cela fait 1 (en binaire 1 et 1 = 1)| | + | |
- | | ''|<'' | ou (inclusif) binaire | | + | |
- | | ''~'' | non binaire | | + | |
- | | ''^'' | XOR (ou exclusif) binaire | | + | |
- | <note> | + | ===== Les opérateurs bit-à-bit ===== |
- | Le ''&<'' ( "et" binaire), le ''|<'' ("ou" binaire), et le ''~'' ("non" binaire)\\ peuvent aussi être remplacés (de façon équivalente) par les opérateurs logiques que l'on a vus au sujet de la composition de commandes sur erreur ou sur réussite. | + | |
+ | 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. | ||
+ | |||
+ | | Liste des opérateurs bit-à-bit ||| | ||
+ | ^ Opérateurs ^ Désignations ^ Résultats ^ | ||
+ | | Opérateur unaire ||| | ||
+ | | **''~''** //expr// | Négation binaire | Retourne le complément à 1 de //expr//\\ (~1 -> 0 ; ~0 -> 1) | | ||
+ | | 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// | 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 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// **''<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 à droite | Retourne le décalage de //expr2// bit(s) à droite de //expr1//\\ (//expr2// bit(s) tronqué(s) à droite d'//expr1//) | | ||
+ | |||
+ | Exemples | ||
+ | <code user> | ||
+ | echo $((~42)) | ||
+ | echo $((42^42)) | ||
+ | echo $((42<<2)) | ||
+ | </code><code> | ||
+ | -43 | ||
+ | 0 | ||
+ | 168 | ||
+ | </code> | ||
+ | |||
+ | Voir aussi : | ||
+ | |||
+ | * [[atelier:chantier:bash:les-operations-binaires|Les opérations binaire]] | ||
- | > ''&&'' : exécution de la commande suivante si, et seulement si la précédente renvoie 0 | ||
- | > | ||
- | > ''||'' : exécution de la commande suivante si, et seulement si la précédente renvoie autre chose que 0 | ||
- | > | ||
- | > ''!'' : inverse du retour d'une commande, c'est à dire un "non" logique | ||
- | ^_^ | ||
- | </note> | ||
===== Écriture utile pour les boucles ===== | ===== Écriture utile pour les boucles ===== | ||
===Post-incrémentation et pré-incrémentation :=== | ===Post-incrémentation et pré-incrémentation :=== |