"Cześć, Bilaabo!"
„Bilaabo z radością wita swojego przyjaciela!”
„Dzisiaj Bilaabo opowie ci o pierwszeństwie operatorów. Ale najpierw opowie ci o samych operatorach”.
— Co to za operatorzy, o których mówisz?
„Właściwie już je znasz. Po prostu mogłeś nie wiedzieć, że nazywają się operatorami”.
„Załóżmy na przykład, że mamy wyrażenie c = a + b; ”
„Ma dwa operatory: operator dodawania i operator przypisania”.
„Innymi słowy, operatory to tylko znaki matematyczne? Jak mnożenie, dzielenie i dodawanie?”
„Tak, to prawda. Istnieją jednak różnice”.
„Nie będę definiował operatorów za ciebie: definicja nie sprawi, że będziesz mądrzejszy. Lepiej zobaczyć ich w akcji. Operatorów można podzielić na kilka grup, które teraz przeanalizujemy”.
1) „ Operatory matematyczne ”
Symbol | Przykład | Nazwa | Opis (co robi) |
---|---|---|---|
+ |
a + b |
Operator dodawania | Operator dodawania. |
- |
c - d |
Operator odejmowania | Odejmuje drugą liczbę od pierwszej. |
* |
a * t |
Operator mnożenia | Mnoży dwie liczby. |
/ |
a / b |
Operator dywizji | Dzieli pierwszą liczbę przez drugą. |
% |
c % d |
Dzieli pierwszą liczbę przez drugą. | Oblicza resztę po podzieleniu pierwszej liczby przez drugą. |
- |
-a |
Jednoargumentowy minus | Zmienia znak zmiennej na przeciwny. Plus do minusa, minus do plusa. |
+ |
+a |
Jednoargumentowy plus | Nic nie zmienia. Zostało to dodane, aby uzupełnić jednoargumentowy operator minus. To tylko dla wyglądu. |
„Rozpoznaję te ze szkoły. Moje oprogramowanie zawiera kursy szkolne”.
„Ale o co chodzi z tym znakiem procenta, jakaś magia?”
„To operator „ reszta po dzieleniu ”. Jeśli 11 dzielimy przez 5, to otrzymujemy 2 i resztę 1. To 1 można otrzymać, zapisując 11% 5;”
„Kiedy dzielisz liczby całkowite w Javie, wynikiem jest również liczba całkowita. Reszta z operacji dzielenia jest po prostu ignorowana. Jeśli podzielimy 8 przez 5, otrzymamy 1”.
Wyrażenie | Wynik | |
---|---|---|
19 / 10 |
1 | Jeśli podzielimy 19 przez 10, wynik to 1 z resztą 9. |
19 % 10 |
9 | Jeśli podzielimy 19 przez 10, wynik to 1 z resztą 9. |
2 / 5 |
0 | Jeśli podzielimy 2 przez 5, wynik to 0 z resztą 2. |
16 % 2 |
0 | Jeśli podzielimy 16 przez 2, wynikiem będzie 8 z resztą równą 0. |
„Ale po co nam, u licha, pozostała część?”
„Załóżmy, że musisz sprawdzić, czy liczba całkowita jest parzysta. Następnie możesz napisać:”
if (a % 2 == 0)
„A jeśli chcesz sprawdzić, czy b jest nieparzyste, możesz napisać:”
if (b % 2 == 1)
„Lub sprawdzić, czy d jest podzielne przez 3:”
if (d % 3 == 0)
— Interesujące. Zapamiętam to.
2) „ Operatory porównania ”
Symbol | Przykład | Nazwa | Opis (co robi) |
---|---|---|---|
< |
a < b |
Mniej niż | Sprawdza, czy a jest mniejsze od b. |
<= |
c <= d |
Mniejszy lub równy | Sprawdza, czy c jest mniejsze lub równe d. |
> |
a > b |
Lepszy niż | Sprawdza, czy a jest większe od b. |
>= |
c >= d |
Większe bądź równe | Sprawdza, czy c jest większe lub równe d. |
== |
i == j |
równa się | Sprawdza, czy i jest równe j. |
!= |
a != 0 |
Nie równe | Sprawdza, czy a nie jest równe zeru. |
„Już korzystam z tego wszystkiego”.
„A jaka jest główna różnica między tymi operatorami a operatorami matematycznymi?”
„Jeśli dodamy dwie liczby, otrzymamy liczbę; ale jeśli porównamy dwie liczby, otrzymamy prawdę lub fałsz”.
„Zgadza się. Wynikiem porównania jest wartość „ wartość logiczna ”, która, jak wiadomo, jest reprezentowana przez typ boolowski. Istnieją dwie możliwości: prawda lub fałsz.
„Tak, wszystko jasne. Już to wiem”.
3) „ Operatory logiczne ”
Symbol | Przykład | Nazwa | Opis (co robi) |
---|---|---|---|
&& |
a && b |
I | Wynik wyrażenia jest prawdziwy tylko wtedy, gdy zarówno a, jak i b są prawdziwe. |
|| |
c || d |
LUB | Wynikiem wyrażenia jest prawda, jeśli a lub b jest prawdziwe. Obaj lub przynajmniej jeden. |
! |
!a |
NIE | Wynikiem wyrażenia jest prawda tylko wtedy, gdy a jest fałszywe. |
„Operatorów logicznych można używać tylko ze zmiennymi lub wyrażeniami boolowskimi”.
Przykład | Opis |
---|---|
boolean a = true; boolean b = true;if (a && b) |
Warunek if jest prawdziwy, jeśli obie wartości są prawdziwe Innymi słowy, jeśli zarówno a, jak i b są prawdziwe, wynikiem jest prawda . |
boolean a = true; boolean b = false;if (a || b) |
Warunek if jest prawdziwy, jeśli co najmniej jedna wartość jest prawdziwa. Innymi słowy, jeśli a lub b jest prawdziwe, wynikiem jest prawda . |
boolean b = false;
|
Warunek if jest prawdziwy, jeśli b nie jest prawdziwe. Innymi słowy, jeśli b jest fałszywe , wynik jest prawdziwy . |
int a = 2, b = 3, c = 4;
|
Jeśli a jest mniejsze niż b i a jest mniejsze niż c, wynik wyrażenia jest prawdziwy. a, b i c są liczbami całkowitymi, ale wynikiem porównania liczb całkowitych jest wartość logiczna (prawda, fałsz), co oznacza, że możemy używać operatorów logicznych. |
— Już to wszystko wiem.
- Naprawdę? Kontynuujmy więc.
4) „ Operatory bitowe ”
Symbol | Przykład | Nazwa | Opis (co robi) |
---|---|---|---|
& |
a & b |
I | Bitowe ORAZ |
| |
c | d |
LUB | Bitowe LUB |
~ |
~a |
NIE | Bitowo NIE |
^ |
a ^ b |
XOR | Bitowo „WYŁĄCZNIE LUB” |
„ Operatory bitowe wykonują operacje bit po bicie na liczbach całkowitych”.
"Co to jest?"
„Każda liczba jest reprezentowana jako zestaw bitów, a następnie wynik jest obliczany w następujący sposób:”
„Jeśli pierwszy bit obu liczb to 1, to pierwszy bit wyniku będzie równy 1”.
„Jeśli drugi bit obu liczb to 1, to drugi bit wyniku będzie równy 1. I tak dalej”.
„Czy to prawda dla wszystkich operatorów bitowych?”
„To o wiele prostsze. Bit może mieć tylko dwie wartości, 0 i 1, prawda?”
"Prawidłowy."
„W takim razie pomyśl o 1 jako prawdziwej, a 0 jako fałszywej. Operacje na poszczególnych bitach będą wtedy prawie identyczne z operacjami logicznymi”:
Wyrażenie logiczne | Wyrażenie bitowe |
---|---|
prawda && prawda == prawda | 1&1 == 1 |
prawda && fałsz == fałsz | 1&0 == 0 |
prawda || prawda == prawda | 1|1 == 1 |
prawda || fałsz == prawda | 1|0 == 1 |
fałsz || fałsz = fałsz | 0|0 == 0 |
!fałsz == prawda | ~0 == 1 |
!prawda == fałsz | ~1 == 0 |
„Och! To takie proste”.
„Tak, tylko nie zapominaj, że operacje bitowe używają odpowiednich bitów z dwóch liczb”.
„Tak, pamiętam: pierwszy bit jednej liczby jest parowany z pierwszym bitem drugiej, a wynik jest również zapisywany na pierwszym bicie. To samo dotyczy pozostałych bitów”.
– Zgadza się. Masz jeszcze jakieś pytania?
„O co chodzi z XOR i„ wyłącznym lub ”?”
„To bułka z masłem: kiedy wartości są różne, to prawda; kiedy są takie same, to fałsz”.
Wyrażenie logiczne | Wyrażenie bitowe |
---|---|
prawda XOR prawda == fałsz | 1 ^ 1 == 0 |
fałsz XOR fałsz == fałsz | 0 ^ 0 == 0 |
prawda XOR fałsz == prawda | 1 ^ 0 == 1 |
fałsz XOR prawda == prawda | 0 ^ 1 == 1 |
Oto kilka innych przykładów operacji bitowych:
Przykład | Liczby jako bity | Wynik jako bity | Wynik |
---|---|---|---|
5 & 3 |
0000010 1 i 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 |
„Dziękuję, Bilaabo. Teraz już wiem”.
„Jest jeszcze jedna grupa operatorów bitowych, operatorzy przesunięcia:”
5) „ Operatorzy zmian ”
Symbol | Przykład | Nazwa | Opis (co robi) |
---|---|---|---|
>> |
a >> b |
prawe przesunięcie | Przesuwa bity liczby a w prawo o b cyfr. |
<< |
c << d |
przesunięcie w lewo | Przesuwa bity liczby c w lewo o d cyfr. |
>>> |
a >>> 2 |
niepodpisane przesunięcie w prawo | Przesuwa bity liczby a w prawo o 2 cyfry. |
„Co to za uliczna magia?”
„Właściwie to wszystko jest bardzo proste. Sprawdź to:”
Przykład | Liczby jako bity | Wynik jako bity | Wynik |
---|---|---|---|
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 |
„Przesunięcie bitów liczby w lewo o 1 to to samo, co pomnożenie liczby przez 2. Przesunięcie o dwie cyfry jest równoważne mnożeniu przez 4, o trzy cyfry — mnożeniu przez 8 i tak dalej”.
„Przesunięcie w prawo odpowiada dzieleniu przez 2, 4, 8, 16 itd.”
„Ale jaka jest różnica między operatorami >>> i >>?”
„Różnią się, gdy pracują z liczbami ujemnymi. Dzieje się tak, ponieważ liczby ze znakiem używają skrajnego lewego bitu do wskazania znaku. W rezultacie liczba ujemna przestaje być ujemna po przesunięciu w prawo. Wymyślili więc dwa różne operatory. Sprawdź to:"
Wyrażenie | Wynik | Opis |
---|---|---|
1 000 1010 >> 1 | 11 000 101 | Liczba ujemna pozostaje ujemna. W przypadku liczb ujemnych bity przychodzące są wypełniane jedynkami. |
1 000 1010 >> 2 | 111 000 10 | |
1 000 1010 >> 3 | 1111 000 1 | |
1 000 1010 >>> 1 | 01 000 101 | Liczba ujemna nie jest już liczbą ujemną. W przypadku liczb ujemnych bity przychodzące są wypełniane zerami. |
1 000 1010 >>> 2 | 001 000 10 | |
1 000 1010 >>> 3 | 0001 000 1 |
„Przesunięcie nie jest cykliczne. Bity, które wykraczają poza lewą lub prawą krawędź liczby, są po prostu odrzucane”.
6) „ Operatory przypisania ”
„Już wiem, co to jest przydział. Ale dlaczego mówisz „operatorzy”?
"Bo jest ich kilka ☺"
Operator | Co to znaczy |
---|---|
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; |
– Myślę, że rozumiesz logikę.
7) " Operatory inkrementacji i dekrementacji "
Notacja | Przykład | Opis |
---|---|---|
++ |
a++; ++b; |
Zwiększa liczbę o 1. |
-- |
d--; --i; |
Zmniejsza liczbę lub zmienną o 1. |
„Czy istnieje różnica między umieszczeniem dwóch znaków minus przed lub po zmiennej?”
„Tak, jest, choć niezbyt duża. Jeśli zmienna z jednym z tych operatorów jest częścią wyrażenia lub przypisania, to są różnice. Wolałbym pokazać ci na przykładzie:”
Przykład | Co naprawdę się dzieje | Opis |
---|---|---|
int a = 3; int b = ++a; |
int a = 3; a = a + 1; int b = a; |
a jest najpierw zwiększane o 1, a następnie jest używane w wyrażeniu. |
int a = 3; int b = a++; |
int a = 3; int b = a; a = a + 1; |
a jest najpierw używane w wyrażeniu, a następnie zwiększane o 1. |
int a = 3; return a++; |
int a = 3; int result = a; a = a + 1; return result; |
Funkcja zwróci 3, ale wartość a zostanie zwiększona o 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; |
Wynikiem tutaj jest 13. Najpierw x wzrośnie o 1, a ta wartość zastąpi pierwszy wyraz, a następnie x ponownie wzrośnie o 1. |
"Wow! To jest fajne!"
„Cieszę się, że ci się podobało. Ale jeśli nie ma wyrażenia ani zadania, nie ma różnic:”
„x++ jest równoważne x = x + 1”.
„++x jest równoważne x = x + 1.”
„Będę o tym pamiętał. Dzięki, Bilaabo”.
8) „ Operator trójskładnikowy ”
„Ten operator nie używa tylko jednej lub dwóch zmiennych lub wyrażeń. Używa jednocześnie trzech zmiennych lub wyrażeń:”
Notacja | Równoważny kod: |
---|---|
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; |
– Cóż, to bardzo wygodne.
„Tak. I jest kompaktowy, a kod czytelny. Miłego używania!”
9) " Inne "
„Bez względu na to, jak dobrze zorganizowana jest Twoja kolekcja muzyczna, nadal musisz utworzyć folder „Różne”.
„Tak, każdy, kto kiedykolwiek musiał kategoryzować muzykę, całkowicie się z tym zgodzi”.
„Więc jest jeszcze trzech operatorów, o których chcę ci powiedzieć:”
Notacja | Przykład | Opis |
---|---|---|
() |
(a + b) * c |
Nawiasy zwiększają priorytet operatora. Rzeczy w nawiasach są wykonywane jako pierwsze. |
[] |
c [i] = c [i + 1]; |
Pobierz element tablicy według indeksu. |
. |
int n = a.length; |
„ Operator kropki ” uzyskuje dostęp do zmiennych i metod obiektu. |
„I wreszcie, oto tabela, która podsumowuje pierwszeństwo operatorów:”
Operatorzy | Przykłady |
---|---|
Najwyższy priorytet (operatory są wykonywane zgodnie z ich kolejnością w tej tabeli) | |
() [] . |
(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; |
= *=, /=, %= -=, += <<=. >>=, >>>= &=, ^=. |= |
|
Najniższy priorytet (wykonywane jako ostatnie) |
GO TO FULL VERSION