Kezelői elsőbbség – 1

– Szia, Bilaabo!

– Bilaabo örömmel köszönti barátját!

"Ma Bilaabo az operátorok elsőbbségéről fog beszélni. Először azonban magáról az operátorról."

– Milyen operátorokról beszél?

– Valójában már ismeri őket. Lehet, hogy nem tudta, hogy operátoroknak hívják őket.

" Tegyük fel például, hogy a c = a + b kifejezés van  ;

"Két operátora van: egy összeadás operátor és egy hozzárendelés operátor."

"Más szóval, az operátorok csak matematikai jelek? Mint a szorzás, az osztás és az összeadás?"

"Igen, ez igaz. Vannak azonban különbségek."

"Nem fogok neked operátorokat definiálni: egy definícióval nem leszel okosabb. Jobb, ha működés közben látod őket. Az operátorokat több csoportra lehet osztani, ezeket most megvizsgáljuk."

1) " Matematikai operátorok "

Szimbólum Példa Név Leírás (mit csinál)
+ a + b Kiegészítés operátor Kiegészítés operátor.
- c - d Kivonás operátor Kivonja a második számot az elsőből.
* a * t Szorzás operátor Két számot megszoroz.
/ a / b Osztály operátor Az első számot elosztja a másodikkal.
% c % d Az első számot elosztja a másodikkal. Kiszámítja a maradékot, miután az első számot elosztja a másodikkal.
- -a Egyedi mínusz A változó előjelét az ellenkezőjére változtatja.
Pluszból mínuszba, és mínuszból pluszba.
+ +a Egyedülálló plusz Nem változtat semmin. Ezt azért adták hozzá, hogy dicsérjem az unáris mínusz operátort. Csak a megjelenés miatt.

"Ezeket az iskolából ismerem fel. A firmware-em iskolai tanfolyamokat is tartalmaz."

– De mi van ezzel a százalékjellel, valami varázslat?

"Ez az " osztás utáni maradék " operátor. Ha 11-et osztunk 5-tel, akkor 2-t kapunk, és 1 maradékát. Ezt az 1-et úgy kaphatjuk meg, hogy 11 % 5;

"Ha egész számokat osztasz a Java nyelven, az eredmény is egész szám. Az osztási művelet maradékát egyszerűen figyelmen kívül hagyjuk. Ha 8-at osztunk 5-tel, 1-et kapunk."

Kifejezés Eredmény
19 / 10 1 Ha a 19-et elosztjuk 10-zel, az eredmény 1, a maradék 9.
19 % 10 9 Ha a 19-et elosztjuk 10-zel, az eredmény 1, a maradék 9 .
2 / 5 0 Ha 2-t elosztunk 5-tel, akkor 0 lesz az  eredmény 2 maradékával.
16 % 2 0 Ha a 16-ot elosztjuk 2-vel, az eredmény 8 lesz, a maradék 0.

– De mi a fenének kell a maradék?

"Tegyük fel, hogy ellenőriznie kell, hogy egy egész szám páros-e. Ezután írhatja:"

if (a % 2 == 0)

"És ha ellenőriznie kell, hogy b páratlan-e, akkor írja be:"

if (b % 2 == 1)

"Vagy annak ellenőrzésére, hogy d osztható-e 3-mal:"

if (d % 3 == 0)

"Érdekes. Emlékszem rá."

2)  " összehasonlító operátorok "

Szimbólum Példa Név Leírás (mit csinál)
< a < b Kevesebb, mint Ellenőrzi, hogy a kisebb-e, mint b.
<= c <= d Kisebb vagy egyenlő Ellenőrzi, hogy c kisebb-e vagy egyenlő-e d-vel.
> a > b Nagyobb, mint Ellenőrzi, hogy a nagyobb-e, mint b.
>= c >= d Nagyobb vagy egyenlő Ellenőrzi, hogy c nagyobb-e vagy egyenlő-e d-vel.
== i == j egyenlő Ellenőrzi, hogy i egyenlő-e j-vel.
!= a != 0 Nem egyenlő Ellenőrzi, hogy a nem egyenlő-e nullával.

– Ezeket már mind használom.

"És mi a fő különbség ezek és a matematikai operátorok között?"

"Ha összeadunk két számot, akkor kapunk egy számot, de ha összehasonlítunk két számot, akkor igazat vagy hamisat kapunk."

"Így van. Az összehasonlítás eredménye egy " logikai érték " érték, amelyet, mint tudod, a logikai típus reprezentál. Két lehetőség van: igaz vagy hamis.

"Igen, ez világos. Ezt már tudom."

3) " Logikai operátorok "

Szimbólum Példa Név Leírás (mit csinál)
&& a && b ÉS A kifejezés eredménye csak akkor igaz, ha a és b is igaz.
|| c || d VAGY A kifejezés eredménye igaz, ha a vagy b igaz. Mindkettőt, vagy legalább egyet.
! !a NEM A kifejezés eredménye csak akkor igaz, ha a hamis.

"A logikai operátorok csak logikai változókkal vagy kifejezésekkel használhatók."

Példa Leírás
boolean a = true;
boolean b = true;if (a && b)
Az if feltétel igaz, ha mindkét érték igaz
Más szóval, ha a és b is igaz, akkor az eredmény igaz .
boolean a = true;
boolean b = false;if (a || b)
Az if feltétel igaz, ha legalább egy érték igaz
Más szóval, ha a vagy b igaz, akkor az eredmény igaz .
boolean b = false;

if (!b)

Az if feltétel igaz, ha b nem igaz.
Más szóval, ha   b hamis , akkor az eredmény  igaz .
int a = 2, b = 3, c = 4;

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

Ha a kisebb, mint b, és a kisebb, mint c, akkor a kifejezés eredménye igaz.
a, b és c egész számok, de az egész számok összehasonlításának eredménye egy logikai érték (igaz, hamis), ami azt jelenti, hogy használhatunk logikai operátorokat.

– Mindezt már tudom.

– Tényleg? Akkor folytassuk.

4) " Bitenkénti operátorok "

Szimbólum Példa Név Leírás (mit csinál)
& a & b ÉS Bitenként ÉS
| c | d VAGY Bitenkénti VAGY
~ ~a NEM Bitenként NEM
^ a ^ b XOR Bitenkénti "EXKLUZÍV VAGY"

" A bitenkénti operátorok bitenkénti műveleteket hajtanak végre egész számokon."

"Mi az?"

"Minden szám bitkészletként jelenik meg, majd az eredményt a következőképpen számítja ki:"

"Ha mindkét szám első bitje 1, akkor az eredmény első bitje 1 lesz."

"Ha mindkét szám második bitje 1, akkor az eredmény második bitje 1 lesz. És így tovább."

"Ez minden bitenkénti operátorra igaz?"

"Ennél sokkal egyszerűbb. A bitnek csak két értéke lehet, 0 és 1, igaz?"

"Jobb."

"Ezután gondolja az 1-et igaznak és a 0-t hamisnak. Az egyes biteken végzett műveletek ekkor szinte azonosak lesznek a logikai műveletekkel:"

Logikai kifejezés Bitenkénti kifejezés
igaz && igaz == igaz 1&1 == 1
igaz && hamis == hamis 1&0 == 0
igaz || igaz == igaz 1|1 == 1
igaz || hamis == igaz 1|0 == 1
hamis || hamis = hamis 0|0 == 0
!false == igaz ~0 == 1
!igaz == hamis ~1 == 0

"Ó! Ez olyan könnyű."

"Igen, csak ne felejtsd el, hogy a bitenkénti műveletek két szám megfelelő bitjeit használják."

"Igen, emlékszem: az egyik szám első bitje párosítva van a második bit első bitjével, és az eredményt is az első bitre írják. És ugyanez vonatkozik a többi bitre is."

– Így van. Van még kérdése?

"Mi a helyzet az XOR-ral és az "exkluzív vagy"-val?

"Ez egy szelet torta: ha az értékek különböznek, az igaz; ha ugyanazok, az hamis."

Logikai kifejezés Bitenkénti kifejezés
igaz XOR igaz == hamis 1 ^ 1 == 0
false XOR false == false 0 ^ 0 == 0
igaz XOR false == igaz 1 ^ 0 == 1
false XOR igaz == igaz 0 ^ 1 == 1

Íme még néhány példa a bitenkénti műveletekre:

Példa Számok, mint bitek Az eredmény bitek formájában Eredmény
5 & 3 0000010 1  és 0000001 1 0000000 1 1
7 & 2 000001 1 1 és 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

– Köszönöm, Bilaabo. Most már tudom.

"Van még egy bitenkénti operátorcsoport, a shift operátorok:"

5) " Shift operátorok "

Szimbólum Példa Név Leírás (mit csinál)
>> a >> b jobb váltás Az a szám bitjeit b számjeggyel jobbra tolja.
<< c << d bal Shift A c szám bitjeit d számjeggyel balra tolja.
>>> a >>> 2 előjel nélküli jobb váltás Az a szám bitjeit 2 számjeggyel jobbra tolja.

– Miféle utcai varázslat ez?

"Valójában minden nagyon egyszerű. Nézze meg:"

Példa Számok, mint bitek Az eredmény bitek formájában Eredmény
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

"Egy szám bitjeinek balra tolása 1-gyel megegyezik a szám 2-vel való szorzásával. A két számjeggyel való eltolás egyenértékű 4-gyel, három számjegyű szorzással - 8-cal és így tovább."

"A jobbra eltolás a 2-vel, 4-gyel, 8-cal, 16-tal stb. való osztásnak felel meg."

"De mi a különbség a >>> és a >> operátorok között?"

"Különböznek, ha negatív számokkal dolgozunk. Ennek az az oka  , hogy az előjeles számok a bal szélső bitet használják az előjel jelzésére. Ennek eredményeként a negatív szám jobbra tolva megszűnik negatívnak lenni. Tehát két különböző operátort találtak ki. Nézd meg:"

Kifejezés Eredmény Leírás
1 000 1010 >> 1 11 000 101 A negatív szám negatív marad.
Negatív számok esetén a bejövő bitek 1-esekkel vannak kitöltve.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 A negatív szám már nem negatív. Negatív számok esetén a bejövő bitek 0-val vannak kitöltve.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"Az eltolás nem ciklikus. Azokat a biteket, amelyek a szám bal vagy jobb szélén túllépnek, egyszerűen eldobják."

6) " Hozzárendelési operátorok "

– Már tudom, mi az a megbízás. De miért mondod, hogy „kezelők”?

"Mert több van belőlük ☺"

Operátor Mit jelent
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;

– Szerintem érted a logikát.

7) " Növekedési és csökkentési operátorok "

Jelölés Példa Leírás
++ a++;
++b;
1-gyel növeli a számot.
-- d--;
--i;
1-gyel csökkenti a számot vagy a változót.

"Van különbség a két mínusz jelet a változó elé vagy utána tenni?"

"Igen, van, bár nem túl nagy. Ha az egyik ilyen operátorral rendelkező változó egy kifejezés vagy hozzárendelés része, akkor vannak eltérések. Inkább bemutatom egy példán:"

Példa Mi történik valójában Leírás
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
az a-t először 1-gyel növeljük, majd ezt használjuk a kifejezésben.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
A kifejezésben először a szerepel, majd 1-gyel nő.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
A függvény 3-at ad vissza, de az a értéke 1-gyel nő.
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;
Az eredmény itt 13. Először x növekszik 1-gyel, és ez az érték váltja fel az első tagot, majd x ismét 1-gyel nő.

"Hűha! Ez klassz!"

"Örülök, hogy tetszett. De ha nincs kifejezés vagy megbízás, akkor nincs különbség:"

"x++ egyenlő azzal, hogy x = x + 1."

"++x egyenértékű: x = x + 1."

– Ezt észben tartom. Köszönöm, Bilaabo.

8)  " Terner operátor "

"Ez az operátor nem csak egy vagy két változót vagy kifejezést használ. Három változót vagy kifejezést használ egyszerre:"

Jelölés Egyenértékű kód:
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;

– Nos, ez nagyon kényelmes.

"Igen. És kompakt, a kód pedig olvasható. Élvezze a használatát!"

9) " egyéb "

"Nem számít, milyen jól szervezett a zenei gyűjteménye, akkor is létre kell hoznia egy "Egyéb" mappát."

"Igen, bárki, akinek valaha is kategorizálnia kellett a zenét, teljesen egyetért."

"Szóval, van még három operátor, amiről szeretnék mesélni:"

Jelölés Példa Leírás
() (a + b) * c A zárójelek növelik az operátor elsőbbségét.
A zárójelben lévő dolgokat először hajtják végre.
[] c [i] = c [i + 1]; Szerezzen be egy tömbelemet index szerint.
. int n = a.length; A " pont operátor " hozzáfér egy objektum változóihoz és metódusaihoz.

"És végül itt van egy táblázat, amely összefoglalja az operátorok elsőbbségét:"

Üzemeltetők Példák
Legmagasabb prioritás (az operátorok végrehajtása a táblázatban szereplő sorrendjük szerint történik)
()
[]
.
(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;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Legalacsonyabb prioritás (utoljára végrehajtva)