„Здравей, Билаабо!“
„Билаабо се радва да поздрави своя приятел!“
„Днес Билаабо ще ви разкаже за приоритета на операторите. Но първо ще ви разкаже за самите оператори.“
— Какви са тези оператори, за които говорите?
„Всъщност вече сте запознати с тях. Просто може да не сте знаели, че се наричат оператори.“
„Например, да кажем, че имаме израза c = a + b; “
„Има два оператора: оператор за добавяне и оператор за присвояване.“
"С други думи, операторите са просто математически знаци? Като умножение, деление и събиране?"
"Да, това е вярно. Има обаче разлики."
„Няма да дефинирам оператори за вас: една дефиниция няма да ви направи по-умни. По-добре е да ги видите в действие. Операторите могат да бъдат разделени на няколко групи, които ще разгледаме сега.“
1) " Математически оператори "
| Символ | Пример | Име | Описание (Howво прави) |
|---|---|---|---|
+ |
a + b |
Оператор за добавяне | Оператор за добавяне. |
- |
c - d |
Оператор за изваждане | Изважда второто число от първото. |
* |
a * t |
Оператор за умножение | Умножава две числа. |
/ |
a / b |
Оператор на разделяне | Дели първото число на второто. |
% |
c % d |
Дели първото число на второто. | Изчислява остатъка след разделяне на първото число на второто. |
- |
-a |
Унарен минус | Променя знака на променливата на противоположния. Плюс към минус и минус към плюс. |
+ |
+a |
Унарен плюс | Не променя нищо. Това беше добавено, за да допълни унарния минус оператор. Това е само за външен вид. |
„Разпознавам ги от учorще. Моят фърмуер включва учorщни курсове.“
„Но Howво е с този знак за процент, няHowва магия?“
„Това е операторът „ остатък след деление “. Ако 11 е разделено на 5, тогава получаваме 2 и остатък от 1. Това 1 може да се получи, като напишете 11 % 5;“
„Когато разделяте цели числа в Java, резултатът също е цяло число. Остатъкът от операцията за деление просто се игнорира. Ако разделим 8 на 5, получаваме 1.“
| Изразяване | Резултат | |
|---|---|---|
19 / 10 |
1 | Ако разделим 19 на 10, резултатът е 1 с остатък 9. |
19 % 10 |
9 | Ако разделим 19 на 10, резултатът е 1 с остатък 9. |
2 / 5 |
0 | Ако разделим 2 на 5, резултатът е 0 с остатък 2. |
16 % 2 |
0 | Ако разделим 16 на 2, резултатът е 8 с остатък 0. |
— Но за Howво, по дяволите, ни трябва остатъкът?
"Да предположим, че трябва да проверите дали дадено цяло число е четно. Тогава можете да напишете:"
if (a % 2 == 0)
„И ако трябва да проверите дали b е странно, тогава можете да напишете:“
if (b % 2 == 1)
"Или за да проверите дали d се дели на 3:"
if (d % 3 == 0)
— Интересно. Ще го запомня.
2) " Оператори за сравнение "
| Символ | Пример | Име | Описание (Howво прави) |
|---|---|---|---|
< |
a < b |
По-малко от | Проверява дали a е по-малко от b. |
<= |
c <= d |
По-малко or равно на | Проверява дали c е по-малко or равно на d. |
> |
a > b |
По-велик от | Проверява дали a е по-голямо от b. |
>= |
c >= d |
По-голямо or равно на | Проверява дали c е по-голямо or равно на d. |
== |
i == j |
равно на | Проверява дали i е равно на j. |
!= |
a != 0 |
Не е равно на | Проверява дали a не е равно на нула. |
„Вече използвам всички тези.“
"И Howва е основната разлика между тези оператори и математическите оператори?"
"Ако съберем две числа, получаваме число; но ако сравним две числа, получаваме вярно or невярно."
„Точно така. Резултатът от сравнението е стойност на „ логическа стойност “, която, Howто знаете, е представена от булевия тип. Има две възможности: вярно or невярно.
"Да, всичко е ясно. Вече го знам."
3) " Логически оператори "
| Символ | Пример | Име | Описание (Howво прави) |
|---|---|---|---|
&& |
a && b |
И | Резултатът от израза е верен само когато и двете a и b са верни. |
|| |
c || d |
ИЛИ | Резултатът от израза е верен, ако a or b е вярно. И двете or поне едната. |
! |
!a |
НЕ | Резултатът от израза е верен само ако a е невярно. |
„Логическите оператори могат да се използват само с булеви променливи or изрази.“
| Пример | Описание |
|---|---|
boolean a = true; boolean b = true;if (a && b) |
Условието if е true, ако и двете стойности са true. С други думи, ако и a, и b са true, тогава резултатът е true . |
boolean a = true; boolean b = false;if (a || b) |
Условието if е true, ако поне една стойност е true. С други думи, ако a or b е true, тогава резултатът е true . |
boolean b = false;
|
Условието if е вярно, ако b не е вярно. С други думи, ако b е невярно , тогава резултатът е вярно . |
int a = 2, b = 3, c = 4;
|
Ако a е по-малко от b и a е по-малко от c, тогава резултатът от израза е верен. a, b и c са цели числа, но резултатът от сравняването на цели числа е логическа стойност (true, false), което означава, че можем да използваме логически оператори. |
— Вече знам всичко това.
"Наистина ли? Тогава да продължим."
4) " Побитови оператори "
| Символ | Пример | Име | Описание (Howво прави) |
|---|---|---|---|
& |
a & b |
И | Побитово И |
| |
c | d |
ИЛИ | Побитово ИЛИ |
~ |
~a |
НЕ | Побитово НЕ |
^ |
a ^ b |
XOR | Побитово „ИЗКЛЮЧИТЕЛНО ИЛИ“ |
" Побитовите оператори изпълняват битови операции с цели числа."
"Какво е това?"
„Всяко число се представя като набор от битове и след това резултатът се изчислява, Howто следва:“
„Ако първият бит на двете числа е 1, тогава първият бит на резултата ще бъде 1.“
„Ако вторият бит на двете числа е 1, тогава вторият бит на резултата ще бъде 1. И така нататък.“
„Това вярно ли е за всички битови оператори?“
„Много по-просто е от това. Битът може да има само две стойности, 0 и 1, нали?“
— Правилно.
„Тогава смятайте 1 за вярно и 0 за невярно. Операциите върху отделни битове тогава ще бъдат почти идентични с логическите операции:“
| Логически израз | Побитово изразяване |
|---|---|
| вярно && вярно == вярно | 1&1 == 1 |
| вярно && невярно == невярно | 1&0 == 0 |
| вярно || вярно == вярно | 1|1 == 1 |
| вярно || невярно == вярно | 1|0 == 1 |
| невярно || невярно = невярно | 0|0 == 0 |
| !false == true | ~0 == 1 |
| !true == false | ~1 == 0 |
"О! Това е толкова лесно."
„Да, само не забравяйте, че побитовите операции използват съответни битове от две числа.“
„Да, помня: първият бит на едно число се свързва с първия бит на второто и резултатът също се записва в първия бит. Същото важи и за останалите битове.“
"Така е. Имате ли други въпроси?"
„Какво става с XOR и „изключително or“?“
"Това е парче торта: когато стойностите са различни, това е вярно; когато са еднакви, това е невярно."
| Логически израз | Побитово изразяване |
|---|---|
| true XOR true == false | 1 ^ 1 == 0 |
| невярно XOR невярно == невярно | 0 ^ 0 == 0 |
| true XOR false == true | 1 ^ 0 == 1 |
| false XOR true == true | 0 ^ 1 == 1 |
Ето още няколко примера за битови операции:
| Пример | Числата като битове | Резултат като битове | Резултат |
|---|---|---|---|
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 |
„Благодаря ти, Билаабо. Сега знам.“
„Има още една група побитови оператори, операторите за смяна:“
5) " Оператори за преместване "
| Символ | Пример | Име | Описание (Howво прави) |
|---|---|---|---|
>> |
a >> b |
дясна смяна | Измества битовете на числото a надясно с b цифри. |
<< |
c << d |
ляво изместване | Измества битовете на числото c наляво с d цифри. |
>>> |
a >>> 2 |
неподписано дясно изместване | Измества битовете на числото a надясно с 2 цифри. |
— Що за улична магия е това?
„Всъщност всичко е много просто. Вижте го:“
| Пример | Числата като битове | Резултат като битове | Резултат |
|---|---|---|---|
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 |
„Преместването на битовете на числото наляво с 1 е същото като умножаването на числото по 2. Преместването с две цифри е еквивалентно на умножение по 4, с три цифри — умножение по 8 и т.н.“
„Преместването надясно съответства на делене на 2, 4, 8, 16 и т.н.“
„Но Howва е разликата между операторите >>> и >>?“
„Те се различават, когато работят с отрицателни числа. Това е така, защото числата със знак използват най-левия бит, за да укажат знака. В резултат на това отрицателно число престава да бъде отрицателно, когато се премести надясно. Така че те излязоха с два различни оператора. Виж това:"
| Изразяване | Резултат | Описание |
|---|---|---|
| 1 000 1010 >> 1 | 11 000 101 | Отрицателното число остава отрицателно. За отрицателни числа, входящите битове се запълват с 1s. |
| 1 000 1010 >> 2 | 111 000 10 | |
| 1 000 1010 >> 3 | 1111 000 1 | |
| 1 000 1010 >>> 1 | 01 000 101 | Отрицателното число вече не е отрицателно. За отрицателни числа входящите битове се запълват с нули. |
| 1 000 1010 >>> 2 | 001 000 10 | |
| 1 000 1010 >>> 3 | 0001 000 1 |
"Промяната не е циклична. Битовете, които се преместват отвъд левия or десния край на числото, просто се изхвърлят."
6) " Оператори за присвояване "
„Вече знам Howво е присвояване. Но защо казвате „оператори“?“
"Защото има няколко от тях ☺"
| Оператор | Какво означава |
|---|---|
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; |
— Мисля, че разбираш логиката.
7) " Оператори за увеличаване и намаляване "
| Нотация | Пример | Описание |
|---|---|---|
++ |
a++; ++b; |
Увеличава числото с 1. |
-- |
d--; --i; |
Намалява числото or променливата с 1. |
„Има ли разлика между поставянето на двата знака минус преди or след променливата?“
„Да, има, макар и не много голяма. Ако променлива с един от тези оператори е част от израз or присвояване, тогава има разлики. Предпочитам да ви покажа с пример:“
| Пример | Какво наистина се случва | Описание |
|---|---|---|
int a = 3; int b = ++a; |
int a = 3; a = a + 1; int b = a; |
a първо се увеличава с 1 и след това се използва в израза. |
int a = 3; int b = a++; |
int a = 3; int b = a; a = a + 1; |
a първо се използва в израза и след това се увеличава с 1. |
int a = 3; return a++; |
int a = 3; int result = a; a = a + 1; return result; |
Функцията ще върне 3, но стойността на a ще бъде увеличена с 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; |
Резултатът тук е 13. Първо, x ще се увеличи с 1 и тази стойност ще замени първия член, а след това x отново ще се увеличи с 1. |
„Уау! Това е страхотно!“
"Радвам се, че ви хареса. Но ако няма израз or задание, тогава няма разлики:"
"x++ е еквивалентно на x = x + 1."
"++x е еквивалентно на x = x + 1."
— Ще го имам предвид. Благодаря, Билаабо.
8) " Троичен оператор "
„Този оператор не използва само една or две променливи or изрази. Той използва три променливи or изрази наведнъж:“
| Нотация | Еквивалентен code: |
|---|---|
a ? b : c; |
if (a) b else c |
int min = a < b ? a : b; |
if (a < b)min = a;elsemin = b; |
return a != null ? a.length : 0; |
if (a != null)return a.length;elsereturn 0; |
— Е, това е супер удобно.
„Да. Компактен е и codeът е четлив. Приятно използване!“
9) " Друго "
„Без meaning колко добре е организирана вашата музикална колекция, все пак трябва да създадете папка „Разни“.
„Да, всеки, който някога е трябвало да категоризира музиката, би се съгласил напълно.“
„И така, има още три оператора, за които искам да ви разкажа:“
| Нотация | Пример | Описание |
|---|---|---|
() |
(a + b) * c |
Скобите увеличават приоритета на оператора. Нещата в скоби се изпълняват първи. |
[] |
c [i] = c [i + 1]; |
Вземете елемент от масив по индекс. |
. |
int n = a.length; |
Операторът " точка " има достъп до променливите и методите на обекта. |
„И накрая, ето table, която обобщава приоритета на операторите:“
| Оператори | Примери |
|---|---|
| Най-висок приоритет (операторите се изпълняват според реда им в тази table) | |
()[]. |
(a + b)c [i] = c [i] + 1 |
++--~!+- |
i++; ++i;--j; a--;~c!freturn +a;return -a; |
*/% |
a * bc / da % b |
+- |
a + bc - dString s = "count"+"35"; |
>><<>>> |
a >> 3b << 2c >>> 3 |
<<=>>= |
a < ba <= bc > bc >= b |
==!= |
a == 3a != 0 |
& |
a & 7 |
^ |
a ^ b |
| |
a | b |
&& |
(a < b) && (a < c) |
|| |
(b != 0) || (c != 0) |
? : = |
a > 0 ? a : -a; |
=*=, /=, %=-=, +=<<=. >>=, >>>=&=, ^=. |= |
|
| Най-нисък приоритет (изпълнен последен) | |
GO TO FULL VERSION