Priorité des opérateurs - 1

"Salut, Bilaabo !"

« Bilaabo est content de saluer son ami !

"Aujourd'hui, Bilaabo vous parlera de la priorité des opérateurs. Mais d'abord, il vous parlera des opérateurs eux-mêmes."

« Quels sont ces opérateurs dont vous parlez ? »

"En fait, vous les connaissez déjà. Vous ne saviez peut-être pas qu'ils s'appelaient des opérateurs."

"Par exemple, disons que nous avons l'expression  c = a + b ; "

"Il a deux opérateurs : un opérateur d'addition et un opérateur d'affectation."

« En d'autres termes, les opérateurs ne sont que des signes mathématiques ? Comme la multiplication, la division et l'addition ? »

"Oui, c'est vrai. Cependant, il y a des différences."

"Je ne définirai pas les opérateurs pour vous : une définition ne vous rendra pas plus intelligent. Il vaut mieux les voir en action. Les opérateurs peuvent être divisés en plusieurs groupes, que nous allons examiner maintenant."

1) " Opérateurs mathématiques "

Symbole Exemple Nom Description (ce qu'il fait)
+ a + b Opérateur d'addition Opérateur d'addition.
- c - d Opérateur de soustraction Soustrait le deuxième nombre du premier.
* a * t Opérateur de multiplication Multiplie deux nombres.
/ a / b Opérateur de division Divise le premier nombre par le second.
% c % d Divise le premier nombre par le second. Calcule le reste après avoir divisé le premier nombre par le second.
- -a Moins unaire Change le signe de la variable en son opposé.
Du plus au moins et du moins au plus.
+ +a Unaire plus Ne change rien. Ceci a été ajouté pour compléter l'opérateur moins unaire. C'est juste pour le look.

"Je les reconnais depuis l'école. Mon micrologiciel comprend des cours scolaires."

"Mais, qu'est-ce que c'est que ce signe de pourcentage, une sorte de sorcellerie ?"

"C'est l'opérateur " reste après division ". Si 11 est divisé par 5, alors on obtient 2 et un reste de 1. Ce 1 peut être obtenu en écrivant 11 % 5;"

"Lorsque vous divisez des entiers en Java, le résultat est également un entier. Le reste de l'opération de division est simplement ignoré. Si nous divisons 8 par 5, nous obtenons 1."

Expression Résultat
19 / 10 1 Si nous divisons 19 par 10, le résultat est 1 avec un reste de 9.
19 % 10 9 Si nous divisons 19 par 10, le résultat est 1 avec un reste de 9.
2 / 5 0 Si nous divisons 2 par 5, le  résultat est 0 avec un reste de 2.
16 % 2 0 Si nous divisons 16 par 2, le résultat est 8 avec un reste de 0.

"Mais pourquoi diable avons-nous besoin du reste ?"

"Supposons que vous ayez besoin de vérifier si un entier est pair. Vous pouvez alors écrire :"

if (a % 2 == 0)

"Et si vous avez besoin de vérifier si b est impair, alors vous pouvez écrire :"

if (b % 2 == 1)

"Ou pour vérifier si d est divisible par 3 :"

if (d % 3 == 0)

« Intéressant. Je m'en souviendrai.

2)  " Opérateurs de comparaison "

Symbole Exemple Nom Description (ce qu'il fait)
< a < b Moins que Vérifie si a est inférieur à b.
<= c <= d Inférieur ou égal à Vérifie si c est inférieur ou égal à d.
> a > b Plus grand que Vérifie si a est supérieur à b.
>= c >= d Plus grand ou égal à Vérifie si c est supérieur ou égal à d.
== i == j équivaut à Vérifie si i est égal à j.
!= a != 0 Pas égal à Vérifie si a n'est pas égal à zéro.

"J'utilise déjà tout cela."

« Et quelle est la principale différence entre ces opérateurs et les opérateurs mathématiques ? »

"Si nous additionnons deux nombres, nous obtenons un nombre ; mais, si nous comparons deux nombres, nous obtenons vrai ou faux."

"C'est vrai. Le résultat d'une comparaison est une valeur " logique ", qui, comme vous le savez, est représentée par le type booléen. Il y a deux possibilités : vrai ou faux.

« Ouais, tout est clair. Je le sais déjà.

3) " Opérateurs logiques "

Symbole Exemple Nom Description (ce qu'il fait)
&& a && b ET Le résultat de l'expression est vrai uniquement lorsque a et b sont vrais.
|| c || d OU Le résultat de l'expression est vrai si a ou b est vrai. Les deux ou au moins un.
! !a PAS Le résultat de l'expression est vrai uniquement si a est faux.

"Les opérateurs logiques ne peuvent être utilisés qu'avec des variables ou des expressions booléennes."

Exemple Description
boolean a = true;
boolean b = true;if (a && b)
La condition if est vraie si les deux valeurs sont vraies
En d'autres termes, si a et b sont vrais, alors le résultat est vrai .
boolean a = true;
boolean b = false;if (a || b)
La condition si est vraie si au moins une valeur est vraie
En d'autres termes, si a ou b est vrai, alors le résultat est vrai .
boolean b = false;

if (!b)

La condition si est vraie si b n'est pas vrai.
En d'autres termes, si   b est false , alors le résultat est  true .
int a = 2, b = 3, c = 4;

if (a < b && a < c)
if ((a < b) && (a < c))

Si a est inférieur à b et a est inférieur à c, alors le résultat de l'expression est vrai.
a, b et c sont des entiers, mais le résultat de la comparaison d'entiers est une valeur logique (vrai, faux), ce qui signifie que nous pouvons utiliser des opérateurs logiques.

"Je sais déjà tout cela."

« Vraiment ? Continuons, alors.

4) " Opérateurs bit à bit "

Symbole Exemple Nom Description (ce qu'il fait)
& a & b ET ET au niveau du bit
| c | d OU OU au niveau du bit
~ ~a PAS PAS au niveau du bit
^ a ^ b XOR "OU EXCLUSIF" au niveau du bit

" Les opérateurs au niveau du bit effectuent des opérations bit à bit sur des entiers."

"Qu'est ce que c'est?"

"Chaque nombre est représenté comme un ensemble de bits, puis le résultat est calculé comme suit :"

"Si le premier bit des deux nombres est 1, alors le premier bit du résultat sera 1."

"Si le deuxième bit des deux nombres est 1, alors le deuxième bit du résultat sera 1. Et ainsi de suite."

"Est-ce vrai pour tous les opérateurs au niveau du bit ?"

« C'est beaucoup plus simple que cela. Un bit ne peut avoir que deux valeurs, 0 et 1, n'est-ce pas ? »

"Droite."

"Ensuite, pensez à 1 comme vrai et à 0 comme faux. Les opérations sur des bits individuels seront alors presque identiques aux opérations logiques :"

Expression logique Expression au niveau du bit
vrai && vrai == vrai 1&1 == 1
vrai && faux == faux 1&0 == 0
vrai || vrai == vrai 1|1 == 1
vrai || faux == vrai 1|0 == 1
faux || faux = faux 0|0 == 0
!faux == vrai ~0 == 1
! vrai == faux ~1 == 0

"Oh! C'est si facile."

"Oui, n'oubliez pas que les opérations au niveau du bit utilisent les bits correspondants de deux nombres."

"Oui, je me souviens : le premier bit d'un nombre est associé au premier bit du second, et le résultat est également écrit sur le premier bit. Et il en va de même pour le reste des bits."

"C'est vrai. Avez-vous d'autres questions ?"

"Qu'y a-t-il avec le XOR et le 'exclusif ou' ?"

"C'est du gâteau : quand les valeurs sont différentes, c'est vrai ; quand elles sont identiques, c'est faux."

Expression logique Expression au niveau du bit
vrai XOR vrai == faux 1 ^ 1 == 0
faux XOR faux == faux 0 ^ 0 == 0
vrai XOR faux == vrai 1 ^ 0 == 1
faux XOR vrai == vrai 0 ^ 1 == 1

Voici quelques exemples supplémentaires d'opérations au niveau du bit :

Exemple Les nombres sous forme de bits Résultat en bits Résultat
5 & 3 0000010 1  & 0000001 1 0000000 1 1
7 & 2 000001 1 1 & 000000 1 0 00000010 2
5 | 9 00000 1 0 1  | 0000 1 00 1 00001101 13
5 ^ 9 00000 101  ^ 00001001 0000 1100 12
~9 ~ 00001001 11110110 246

"Merci, Bilaabo. Maintenant je sais."

"Il existe un autre groupe d'opérateurs au niveau du bit, les opérateurs de décalage :"

5) " Opérateurs de décalage "

Symbole Exemple Nom Description (ce qu'il fait)
>> a >> b décalage à droite Décale les bits du nombre a vers la droite de b chiffres.
<< c << d décalage à gauche Décale les bits du nombre c vers la gauche de d chiffres.
>>> a >>> 2 décalage à droite non signé Décale les bits du nombre a vers la droite de 2 chiffres.

"Quel genre de magie de rue est-ce ?"

"C'est en fait très simple. Découvrez-le :"

Exemple Les nombres sous forme de bits Résultat en bits Résultat
10 >> 1 0000 101 0 >> 1 00000 101 5
10 >> 2 0000 101 0 >> 2 000000 10 2
10 << 1 0000 101 0 << 1 000 101 00 20
10 << 2 0000 101 0 << 2 00 101 000 40

"Décaler les bits d'un nombre vers la gauche de 1 équivaut à multiplier le nombre par 2. Un décalage de deux chiffres équivaut à une multiplication par 4, par trois chiffres - une multiplication par 8, etc."

"Déplacer vers la droite correspond à diviser par 2, 4, 8, 16, etc."

"Mais quelle est la différence entre les opérateurs >>> et >> ?"

"Ils diffèrent lorsqu'ils travaillent avec des nombres négatifs. C'est parce que  les nombres signés utilisent le bit le plus à gauche pour indiquer le signe. En conséquence, un nombre négatif cesse d'être négatif lorsqu'il se déplace vers la droite. Ils ont donc proposé deux opérateurs différents. Vérifiez-le:"

Expression Résultat Description
1 000 1010 >> 1 11 000 101 Le nombre négatif reste négatif.
Pour les nombres négatifs, les bits entrants sont remplis de 1.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Le nombre négatif n'est plus négatif. Pour les nombres négatifs, les bits entrants sont remplis de 0.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"Le décalage n'est pas cyclique. Les bits qui se déplacent au-delà du bord gauche ou droit du nombre sont simplement ignorés."

6) " Opérateurs d'affectation "

"Je sais déjà ce qu'est une affectation. Mais pourquoi dites-vous 'opérateurs'?"

"Parce qu'il y en a plusieurs ☺"

Opérateur Ce que cela veut dire
a += b; a = a + b;
a -= b; a = a - b;
a *= b; a = a * b;
a %= b; a = a % b;
a |= b; a = a | b;
a &= b; a = a & b;

"Je pense que vous comprenez la logique."

7) " Opérateurs d'incrémentation et de décrémentation "

Notation Exemple Description
++ a++;
++b;
Augmente le nombre de 1.
-- d--;
--i;
Diminue le nombre ou la variable de 1.

"Y a-t-il une différence entre mettre les deux signes moins avant ou après la variable ?"

"Oui, il y en a, mais pas très grand. Si une variable avec l'un de ces opérateurs fait partie d'une expression ou d'une affectation, alors il y a des différences. Je préfère vous montrer par exemple :"

Exemple Que se passe-t-il vraiment Description
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a est d'abord augmenté de 1, puis il est utilisé dans l'expression.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a est d'abord utilisé dans l'expression, puis augmente de 1.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
La fonction renverra 3, mais la valeur de a sera augmentée de 1.
int x = 5;
x = ++x + ++x;
int x = 5;
int a = x + 1;// The first term is 6
x = a;
int b = x + 1;// The second term is 7
x = b;
x = a + b;
Le résultat ici est 13. Premièrement, x augmentera de 1, et cette valeur remplacera le premier terme, puis x augmentera à nouveau de 1.

« Waouh ! C'est cool ! »

"Je suis content que ça vous ait plu. Mais s'il n'y a pas d'expression ou d'affectation, alors il n'y a pas de différences :"

"x++ est équivalent à x = x + 1."

"++x est équivalent à x = x + 1."

"Je garderai cela à l'esprit. Merci, Bilaabo."

8)  " Opérateur ternaire "

"Cet opérateur n'utilise pas seulement une ou deux variables ou expressions. Il utilise trois variables ou expressions à la fois :"

Notation Code équivalent :
a ? b : c; if (a)
b
else
c
int min = a < b ? a : b; if (a < b)
min = a;
else
min = b;
return a != null ? a.length : 0; if (a != null)
return a.length;
else
return 0;

"Eh bien, c'est super pratique."

"Oui. Et c'est compact et le code est lisible. Profitez-en!"

9) " Autre "

"Peu importe la qualité de l'organisation de votre collection musicale, vous devez toujours créer un dossier "Divers"."

"Ouais, quiconque a déjà eu à catégoriser la musique serait totalement d'accord."

"Donc, il y a trois autres opérateurs dont je veux vous parler :"

Notation Exemple Description
() (a + b) * c Les parenthèses augmentent la priorité des opérateurs.
Les choses entre parenthèses sont exécutées en premier.
[] c [i] = c [i + 1]; Récupère un élément de tableau par index.
. int n = a.length; L' " opérateur point " accède aux variables et aux méthodes d'un objet.

"Et, enfin, voici un tableau qui résume la priorité des opérateurs :"

Les opérateurs Exemples
Priorité la plus élevée (les opérateurs sont exécutés selon leur ordre dans ce tableau)
()
[]
.
(a + b)
c [i] = c [i] + 1
++
--
~
!
+
-
i++; ++i;
--j; a--;
~c
!f
return +a;
return -a;
*
/
%
a * b
c / d
a % b
+
-
a + b
c - d
String s = "count"+"35";
>>
<<
>>>
a >> 3
b << 2
c >>> 3
<
<=
>
>=
a < b
a <= b
c > b
c >= b
==
!=
a == 3
a != 0
& a & 7
^ a ^ b
| a | b
&& (a < b) && (a < c)
|| (b != 0) || (c != 0)
? : = a > 0 ? a : -a;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Priorité la plus basse (exécutée en dernier)