– 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;
|
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;
|
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) |
GO TO FULL VERSION