Voorrang van operator - 1

"Hallo Bilaabo!"

"Bilaabo is blij zijn vriend te begroeten!"

'Vandaag zal Bilaabo je vertellen over de voorrang van operators. Maar eerst zal hij je iets vertellen over de operators zelf.'

"Wat zijn deze operators waar je het over hebt?"

'Eigenlijk ken je ze al. Je wist misschien niet dat ze operators heten.'

"Stel bijvoorbeeld dat we de uitdrukking  c = a + b hebben; "

"Het heeft twee operatoren: een opteloperator en een toewijzingsoperator."

"Met andere woorden, operatoren zijn gewoon wiskundige tekens? Zoals vermenigvuldigen, delen en optellen?"

"Ja, dat klopt. Er zijn echter verschillen."

"Ik zal geen operatoren voor je definiëren: van een definitie word je niet slimmer. Het is beter om ze in actie te zien. Operators kunnen in verschillende groepen worden verdeeld, die we nu zullen onderzoeken."

1) " Wiskundige operatoren "

Symbool Voorbeeld Naam Beschrijving (wat het doet)
+ a + b Toevoegingsoperator Toevoegingsoperator.
- c - d Aftrekkingsoperator Trekt het tweede getal af van het eerste.
* a * t Vermenigvuldigingsoperator Vermenigvuldigt twee getallen.
/ a / b Divisie operator Deelt het eerste getal door het tweede.
% c % d Deelt het eerste getal door het tweede. Berekent de rest na het delen van het eerste getal door het tweede.
- -a Unaire min Verandert het teken van de variabele in het tegenovergestelde.
Plus naar min, en min naar plus.
+ +a Unair plus Verandert niets. Dit is toegevoegd als aanvulling op de unaire min-operator. Het is alleen voor de looks.

"Ik herken deze van school. Mijn firmware bevat schoolcursussen."

"Maar wat is er met dat procentteken, een soort tovenarij?"

"Het is de operator " rest na deling ". Als 11 wordt gedeeld door 5, krijgen we 2 en een rest van 1. Deze 1 kan worden verkregen door 11 % 5 te schrijven;"

"Als je gehele getallen in Java deelt, is het resultaat ook een geheel getal. De rest van de delingsbewerking wordt gewoon genegeerd. Als we 8 door 5 delen, krijgen we 1."

Uitdrukking Resultaat
19 / 10 1 Als we 19 delen door 10, is het resultaat 1 met een rest van 9.
19 % 10 9 Als we 19 delen door 10, is het resultaat 1 met een rest van 9.
2 / 5 0 Als we 2 door 5 delen, is het  resultaat 0 met een rest van 2.
16 % 2 0 Als we 16 delen door 2, is het resultaat 8 met een rest van 0.

'Maar waar hebben we in hemelsnaam de rest voor nodig?'

"Stel dat je moet controleren of een geheel getal even is. Dan kun je schrijven:"

if (a % 2 == 0)

"En als je wilt controleren of b oneven is, dan kun je schrijven:"

if (b % 2 == 1)

"Of om te controleren of d deelbaar is door 3:"

if (d % 3 == 0)

'Interessant. Dat zal ik onthouden.'

2)  " Vergelijkingsoperatoren "

Symbool Voorbeeld Naam Beschrijving (wat het doet)
< a < b Minder dan Controleert of a kleiner is dan b.
<= c <= d Minder dan of gelijk aan Controleert of c kleiner is dan of gelijk is aan d.
> a > b Groter dan Controleert of a groter is dan b.
>= c >= d Groter dan of gelijk aan Controleert of c groter is dan of gelijk is aan d.
== i == j gelijk aan Controleert of i gelijk is aan j.
!= a != 0 Niet gelijk aan Controleert of a niet gelijk is aan nul.

"Ik gebruik ze allemaal al."

"En wat is het belangrijkste verschil tussen deze operatoren en de wiskundige operatoren?"

"Als we twee getallen optellen, krijgen we een getal; maar als we twee getallen vergelijken, krijgen we waar of onwaar."

"Dat klopt. Het resultaat van een vergelijking is een " logische waarde " waarde, die, zoals u weet, wordt weergegeven door het booleaanse type. Er zijn twee mogelijkheden: waar of onwaar.

"Ja, dat is allemaal duidelijk. Dat weet ik al."

3) " Logische operatoren "

Symbool Voorbeeld Naam Beschrijving (wat het doet)
&& a && b EN Het resultaat van de uitdrukking is alleen waar als zowel a als b waar zijn.
|| c || d OF Het resultaat van de uitdrukking is waar als a of b waar is. Beiden of in ieder geval één.
! !a NIET Het resultaat van de uitdrukking is alleen waar als a onwaar is.

"Logische operatoren kunnen alleen worden gebruikt met booleaanse variabelen of uitdrukkingen."

Voorbeeld Beschrijving
boolean a = true;
boolean b = true;if (a && b)
De if-voorwaarde is waar als beide waarden waar zijn
Met andere woorden, als zowel a als b waar zijn, dan is het resultaat waar .
boolean a = true;
boolean b = false;if (a || b)
De if-voorwaarde is waar als ten minste één waarde waar is.
Met andere woorden, als a of b waar is, is het resultaat waar .
boolean b = false;

if (!b)

De if-voorwaarde is waar als b niet waar is.
Met andere woorden, als   b onwaar is , dan is het resultaat  waar .
int a = 2, b = 3, c = 4;

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

Als a kleiner is dan b en a kleiner dan c, dan is het resultaat van de uitdrukking waar.
a, b en c zijn gehele getallen, maar het resultaat van het vergelijken van gehele getallen is een logische waarde (true, false), wat betekent dat we logische operatoren kunnen gebruiken.

"Ik weet dit allemaal al."

'Echt waar? Laten we dan verder gaan.'

4) " Bitsgewijze operatoren "

Symbool Voorbeeld Naam Beschrijving (wat het doet)
& a & b EN Bitsgewijze EN
| c | d OF Bitsgewijze OF
~ ~a NIET Bitsgewijze NIET
^ a ^ b XOR Bitsgewijze "EXCLUSIEF OF"

" Bitsgewijze operatoren voeren bitsgewijze bewerkingen uit op gehele getallen."

"Wat is dat?"

"Elk getal wordt weergegeven als een set bits en vervolgens wordt het resultaat als volgt berekend:"

"Als het eerste bit van beide getallen 1 is, dan is het eerste bit van het resultaat 1."

"Als het tweede bit van beide getallen 1 is, dan is het tweede bit van het resultaat 1. En zo verder."

"Geldt dat voor alle bitsgewijze operatoren?"

"Het is veel eenvoudiger dan dat. Een bit kan maar twee waarden hebben, 0 en 1, toch?"

"Rechts."

"Beschouw 1 dan als waar en 0 als onwaar. Bewerkingen op individuele bits zullen dan bijna identiek zijn aan logische bewerkingen:"

Logische uitdrukking Bitsgewijze expressie
waar && waar == waar 1&1 == 1
waar && onwaar == onwaar 1&0 == 0
waar || waar == waar 1|1 == 1
waar || onwaar == waar 1|0 == 1
vals || onwaar = onwaar 0|0 == 0
!false == waar ~0 == 1
!waar == onwaar ~1 == 0

"Oh! Dat is zo makkelijk."

"Ja, maar vergeet niet dat bitsgewijze bewerkingen corresponderende bits van twee getallen gebruiken."

"Ja, ik weet het nog: het eerste bit van een getal wordt gekoppeld aan het eerste bit van het tweede, en het resultaat wordt ook naar het eerste bit geschreven. En hetzelfde geldt voor de rest van de bits."

"Dat klopt. Heb je nog andere vragen?"

"Wat is er met de XOR en 'exclusief of'?"

"Het is een fluitje van een cent: als de waarden verschillen, is het waar; als ze hetzelfde zijn, is het onwaar."

Logische uitdrukking Bitsgewijze expressie
waar XOR waar == onwaar 1 ^ 1 == 0
onwaar XOR onwaar == onwaar 0 ^ 0 == 0
waar XOR onwaar == waar 1 ^ 0 == 1
onwaar XOR waar == waar 0 ^ 1 == 1

Hier zijn nog een paar voorbeelden van bitsgewijze bewerkingen:

Voorbeeld Getallen als bits Resultaat als bits Resultaat
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

'Dank je, Bilaabo. Nu weet ik het.'

"Er is nog een groep bitsgewijze operators, de shift-operators:"

5) " Ploegoperators "

Symbool Voorbeeld Naam Beschrijving (wat het doet)
>> a >> b rechts verschuiven Verschuift de bits van het getal a met b cijfers naar rechts.
<< c << d linker shift Verschuift de bits van het getal c met d cijfers naar links.
>>> a >>> 2 niet-ondertekende rechtsverschuiving Verschuift de bits van het getal a met 2 cijfers naar rechts.

"Wat is dit voor straatmagie?"

"Het is eigenlijk allemaal heel simpel. Kijk maar eens:"

Voorbeeld Getallen als bits Resultaat als bits Resultaat
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

"De bits van een getal naar links verschuiven met 1 is hetzelfde als het getal vermenigvuldigen met 2. Verschuiven met twee cijfers is gelijk aan vermenigvuldigen met 4, met drie cijfers - vermenigvuldigen met 8, enzovoort."

"Naar rechts verschuiven komt overeen met delen door 2, 4, 8, 16, etc."

"Maar wat is het verschil tussen de operatoren >>> en >>?"

"Ze verschillen wanneer ze met negatieve getallen werken. Dit komt omdat  getekende getallen het meest linkse bit gebruiken om het teken aan te geven. Als gevolg hiervan is een negatief getal niet langer negatief wanneer het naar rechts verschuift. Dus bedachten ze twee verschillende operatoren. Bekijken:"

Uitdrukking Resultaat Beschrijving
1 000 1010 >> 1 11 000 101 Het negatieve getal blijft negatief.
Voor negatieve getallen worden de inkomende bits gevuld met 1s.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Het negatieve getal is niet langer negatief. Voor negatieve getallen worden de inkomende bits gevuld met nullen.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"De verschuiving is niet cyclisch. Bits die voorbij de linker- of rechterrand van het getal komen, worden gewoon weggegooid."

6) " Toewijzingsoperatoren "

"Ik weet al wat opdracht is. Maar waarom zeg je 'operators'?"

"Omdat het er meerdere zijn ☺"

Exploitant Wat het betekent
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;

"Ik denk dat je de logica snapt."

7) " Verhogen en verlagen van operators "

Notatie Voorbeeld Beschrijving
++ a++;
++b;
Verhoogt het getal met 1.
-- d--;
--i;
Verlaagt het getal of de variabele met 1.

"Is er een verschil tussen het plaatsen van de twee mintekens voor of achter de variabele?"

"Ja, die is er, maar niet erg groot. Als een variabele met een van deze operatoren deel uitmaakt van een uitdrukking of opdracht, dan zijn er verschillen. Ik laat je liever aan de hand van een voorbeeld zien:"

Voorbeeld Wat gebeurt er echt Beschrijving
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a wordt eerst met 1 verhoogd en vervolgens in de uitdrukking gebruikt.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a wordt eerst gebruikt in de uitdrukking en wordt vervolgens verhoogd met 1.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
De functie retourneert 3, maar de waarde van a wordt met 1 verhoogd.
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;
Het resultaat is hier 13. Eerst zal x met 1 toenemen, en deze waarde zal de eerste term vervangen, en dan zal x weer met 1 toenemen.

"Ho! Dat is gaaf!"

"Ik ben blij dat je het leuk vond. Maar als er geen uitdrukking of opdracht is, dan zijn er geen verschillen:"

"x++ is gelijk aan x = x + 1."

"++x is gelijk aan x = x + 1."

'Dat zal ik onthouden. Bedankt, Bilaabo.'

8)  " Ternaire operator "

"Deze operator gebruikt niet slechts één of twee variabelen of uitdrukkingen. Hij gebruikt drie variabelen of uitdrukkingen tegelijk:"

Notatie Gelijkwaardige code:
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;

"Nou, dat is superhandig."

"Ja. En het is compact en de code is leesbaar. Veel plezier ermee!"

9) " anders "

"Hoe goed je muziekcollectie ook is georganiseerd, je moet nog steeds een map 'Diversen' maken."

"Ja, iedereen die ooit muziek heeft moeten categoriseren, zou het daar helemaal mee eens zijn."

"Dus er zijn nog drie operators waar ik je over wil vertellen:"

Notatie Voorbeeld Beschrijving
() (a + b) * c Haakjes verhogen de prioriteit van de operator.
Dingen tussen haakjes worden eerst uitgevoerd.
[] c [i] = c [i + 1]; Krijg een array-element per index.
. int n = a.length; De " puntoperator " geeft toegang tot de variabelen en methoden van een object.

"En tot slot is hier een tabel die de prioriteit van de operator samenvat:"

Exploitanten Voorbeelden
Hoogste prioriteit (operators worden uitgevoerd volgens hun volgorde in deze tabel)
()
[]
.
(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;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Laagste prioriteit (laatst uitgevoerd)