„Здравей, Билаабо!“
„Билаабо се радва да поздрави своя приятел!“
„Днес Билаабо ще ви разкаже за приоритета на операторите. Но първо ще ви разкаже за самите оператори.“
— Какви са тези оператори, за които говорите?
„Всъщност вече сте запознати с тях. Просто може да не сте знаели, че се наричат оператори.“
„Например, да кажем, че имаме израза 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; else min = b; |
return a != null ? a.length : 0; |
if (a != null) return a.length; else return 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 !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; |
= *=, /=, %= -=, += <<=. >>=, >>>= &=, ^=. |= |
|
Най-нисък приоритет (изпълнен последен) |
GO TO FULL VERSION