CodeGym /Kursy /Wielowątkowość w Java /Priorytet operatora

Priorytet operatora

Wielowątkowość w Java
Poziom 1, Lekcja 1
Dostępny
Priorytet operatora - 1

"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;

if (!b)

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;

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

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)

 

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION