Давай поговоримо про операції в Java: числових, логічних, побітових. Це теоретичний базис, який потрібен, щоб навчитися програмувати.
Таблиця 1. Бінарні арифметичні оператори
Перші чотири оператори не повинні викликати запитань: так само, як у математиці. Останній оператор, залишок від поділу, також робить нічого надскладного. Наприклад, якщо поділити 24 на 7, ми отримаємо 3 цілих і 3 у залишку. Саме залишок і поверне цей оператор:
Ця програма виведе наступне: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java дозволяє комбінувати: наприклад, оператори привласнення та арифметичні оператори. Розглянемо приклад:
Крім бінарних, Java має унарні арифметичні оператори.
Таблиця 2. Унарні арифметичні оператори:
Приклад унарних плюсу та мінусу:
Операції інкременту та декременту по суті прості. У першому випадку відбувається збільшення змінної на 1, у другому - зменшення змінної на 1. Приклад нижче:
Таблиця 3. Оператори інкременту-декременту:
Демонстрація:
Крім арифметичних, існують операції порівняння (двох чисел). Результатом завжди буде істина або брехня ( true / false ).
Таблиця 4. Оператори порівняння
Приклади:
Таблиця 5. Таблиця істинності оператора заперечення (NOT)
Таблиця 6. Таблиця істинності оператора кон'юнкції (AND)
Таблиця 7. Таблиця істинності оператора диз'юнкції (OR)
Таблиця 8. Таблиця істинності оператора додавання по модулю (XOR)
У Java є ті ж логічні операції:
І до
Тепер у нас є скорочені оператори (
Іноді результат виразу можна визначити вже по першому операнду. Цим і відрізняються скорочені оператори
Що стосується скороченими операторами не обчислюється друга частина висловлювання. Але відбувається це лише тоді, коли результат виразу очевидний вже за першим операндом.
Продемонструємо рахунок від 0 до 15 у десятковій системі та у двійковій:
Як бачимо, все не так уже й складно. Крім бітів, є інші знайомі одиниці виміру інформації - байти , кілобайти , мегабайти , гігабайти і т.д. Ти, напевно, знаєш, що в 1 байті - 8 біт . Що це означає? Це означає, що 8 бітів поспіль займають 1 байт. Ось приклади, якими можуть бути бати:
Розглянемо тип
Вуаля — все не так уже й складно. Але все-таки дещо слід уточнити.
Розглянемо це з прикладу 8-ми бітного числа:
Підхід простий і в принципі зрозумілий. Однак він має недоліки: виникають труднощі з виконанням математичних операцій. Наприклад зі складанням негативних і позитивних чисел. Їх не можна складати, якщо не провести додаткових маніпуляцій.
Як ми вже з'ясували числа можна подати у вигляді набору бітів. Побітові операції здійснюють операції над кожним бітом такого уявлення. Візьмемо
Давай подивимось як це виглядає в коді Java:
У першому рядку ми отримали значення у двійковій системі числення без провідних нулів. Хоч ми їх не бачимо, вони є. Про це говорить другий рядок, у якому всі біти трансформувалися у зворотні. Саме тому ми бачимо багато провідних одиниць. Це колишні провідні нулі, які ігнорувалися компілятором при виведенні першого рядка. Ось невелика програма, яка виводить для наочності ще й провідні нулі.
Ця операція здійснюється над двома числами. Приклад у Java коді:
Тепер поглянемо на те, як це виглядало б у IDEA:
Приклад коду:
Результатом операції буде число 20 у десятковій системі. Як видно зі схеми вище, всі біти зрушуються вліво на 1. При цій операції значення старшого біта (крайнього лівого) втрачається. А наймолодший біт (крайній правий) заповнюється банкрутом. Що можна сказати про цю операцію?
При операції зсуву ми втрачаємо праві біти. Вони просто зникають. Крайній лівий біт – показник знака числа (0 – число позитивне, 1 – негативне). Тому у підсумковому значенні він ставиться таким самим, як і у вихідному числі. Приклад із негативним числом:
Крайній правий біт загубився, а крайній лівий біт скопійований з вихідного числа, як почесний показник знака числа. Як це все здійснити у IDEA? В принципі, нічого складного, просто беремо і зрушуємо:
Тепер. Що можна сказати про числа, над якими здійснюється зсув праворуч? Вони діляться на 2. Щоразу, здійснюючи зрушення однією біт вправо ми ділимо вихідне число на 2. Якщо число націло на 2 не ділиться, результат буде округлений у бік мінус нескінченності (у менший бік). Але це працює тільки якщо ми зрушуємо біти рівно на 1. А якщо на 2 біти, ділимо на 4. На 3 біти — ділимо на 8. На 4 біти — на 16. Бачиш? Ступені двійки… При зрушенні числа
Для пошуку мінімального елемента просто змінюємо знак порівняння у потрібному місці.
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/b59aa94a-b935-498f-a0b7-72a3a76d3deb/original.jpeg)
- Які бувають оператори в Java
- Оператори Java в курсі JavaRush
- Операції над числами в Java
- Логічні операції у Java
- Побітові операції в Java
- Пріоритет операцій на Java
- Корисні приклади використання
Які бувають оператори в Java
Для будь-якої операції нам потрібно як мінімум дві речі:- оператор;
- операнд.
Оператори Java в курсі JavaRush
Декілька лекцій присвячено операторам Java на четвертому рівні першого квесту - Java Syntax. Зокрема, умовним операторам типу boolean . В курсі є 22 завдання, які допоможуть розібратися з роботою операторів порівняння, умовних, логічних операторів.Операції над числами в Java
Найчастіша операція, яку програмісти роблять над числами - присвоєння числового значення будь-якої змінної. Вона, як і оператор,=
тобі знайомі:
int a = 1;
int b = 2;
int c = 3;
Є також арифметичні операції. Вони здійснюються за допомогою бінарних арифметичних операторів:
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/c9bc8057-292e-40b1-9e40-c4de9c156087/original.jpeg)
System.out.println(24 % 7); // виведе 3
Ось приклади з сайту офіційної документації Oracle: ![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/d14a2043-54d1-4710-81da-b93dfd260909/original.jpeg)
int x = 0;
x = x + 1; // x = 0 + 1 => x = 1
x = x + 1; // x = 1 + 1 => x = 2
x = x + 1; // x = 2 + 1 => x = 3
Тут ми поставабо змінну x
і надали їй нульове значення. Далі у кожному рядку ми присвоюємо значенню x
суму поточного значення змінної x
та одиниці. У коментарях до кожного рядка є пояснення. Цю процедуру називають нарощуванням або інкрементуванням змінної. Операцію інкрементування з прикладу вище можна замінити аналогічною з використанням комбінації операторів:
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
Комбінувати оператор присвоювання можна з будь-яким арифметичним оператором:
int x = 0;
x += 10; // x = 0 + 10 => x = 10
x -= 5; // x = 10 - 5 => x = 5
x *= 5; // x = 5 * 5 => x = 25
x /= 5; // x = 25 / 5 => x = 5
x %= 3; // x = 5 % 3 => x = 2;
Продемонструємо роботу останнього прикладу:
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559737990697.gif)
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/0631cf90-c334-4b37-b1ee-e17d19b6a60a/original.jpeg)
int x = 0;
x = (+5) + (+15); //Дужки для наочності, можна і без них
System.out.println("x = " + x);
int y = -x;
System.out.println("y = " + y);
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738028102.gif)
int x = 9;
x++;
System.out.println(x); // 10
int y = 21;
y--;
System.out.println(y); // 20
Є два типи даних операцій – постфіксна та префіксна. У першому випадку оператор пишеться після змінної, у другому випадку перед змінною. Різниця лише в тому, коли здійсниться операція інкрементування чи декрементування. Приклад та опис у таблиці нижче. Припустимо, у нас є змінна:
int a = 2;
Тоді:
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/fb5f6ae2-d6a5-4e9b-80d3-7e95c17a11ba/original.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738060892.gif)
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/438975aa-6634-425b-9259-389cda12c5e2/1024.jpeg)
int a = 1;
int b = 2;
boolean comparisonResult = a == b;
System.out.println("a == b :" + comparisonResult);
comparisonResult = a != b;
System.out.println("a != b :" + comparisonResult);
comparisonResult = a > b;
System.out.println("a > b :" + comparisonResult);
comparisonResult = a >= b;
System.out.println("a >= b :" + comparisonResult);
comparisonResult = a < b;
System.out.println("a < b :" + comparisonResult);
comparisonResult = a <= b;
System.out.println("a <= b :" + comparisonResult);
Демонстрація:
![Ознайомлення з операторами Java: логічні, арифметичні, побітові - 10](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738083222.gif)
Логічні операції у Java
Розглянемо логічні операції та таблиці істинності кожної з них:- операція заперечення (
NOT
); - операція кон'юнкції, логічне І (
AND
); - операція диз'юнкції, логічне АБО (
OR
); - операція додавання за модулем, що виключає АБО (
XOR
).
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/d7032050-a36a-441e-b3ce-5f11fef9fab0/original.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/c36c6a30-6473-4a6c-8762-2aeb901d80bf/1024.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові.](https://cdn.javarush.com/images/article/16baeeba-904a-4f84-a1cb-6118e277b55c/original.jpeg)
![Ознайомлення з операторами Java: логічні, арифметичні, побітові - 10](https://cdn.javarush.com/images/article/4c798cf5-810e-4fd6-872d-44ede6d5ed54/1024.jpeg)
!
- Оператор заперечення;&&
- Оператор логічне І (скорочений);||
- Оператор логічне АБО (скорочений);&
- Оператор побітове І;|
- Оператор побітове АБО;^
- Оператор побітове що виключає АБО.
public class LogicDemo {
public static void main(String[] args) {
notExample();
andExample();
orExample();
xorExample();
}
public static void notExample() {
System.out.println("NOT EXAMPLE:");
System.out.println("NOT false = " + !false);
System.out.println("NOT true = " + !true);
System.out.println();
}
public static void andExample() {
System.out.println("AND EXAMPLE:");
System.out.println("false AND false = " + (false & false));
System.out.println("false AND true = " + (false & true));
System.out.println("true AND false = " + (true & false));
System.out.println("true AND true = " + (true & true));
System.out.println();
}
public static void orExample() {
System.out.println("OR EXAMPLE:");
System.out.println("false OR false = " + (false | false));
System.out.println("false OR true = " + (false | true));
System.out.println("true OR false = " + (true | false));
System.out.println("true OR true = " + (true | true));
System.out.println();
}
public static void xorExample() {
System.out.println("XOR EXAMPLE:");
System.out.println("false XOR false = " + (false ^ false));
System.out.println("false XOR true = " + (false ^ true));
System.out.println("true XOR false = " + (true ^ false));
System.out.println("true XOR true = " + (true ^ true));
System.out.println();
}
}
Ця програма виведе на екран: NOT EXAMPLE: NOT false = true NOT true = false AND EXAMPLE: false AND false = false false AND true = false true AND false = false true AND true = true OR EXAMPLE: false OR false = false false OR true = true true OR false = true true OR true = true XOR EXAMPLE: false XOR false = false false XOR true = true true XOR false = true true XOR true = false Логічні оператори можна застосовувати лише до змінних boolean
. У нашому випадку ми застосовували їх одразу до значень, але можна їх використовувати і зі boolean
змінними:
![Знайомство з операторами Java: логічні, арифметичні, побітові - 15](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738103013.gif)
boolean
виразів:
![Знайомство з операторами Java: логічні, арифметичні, побітові - 16](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738145913.gif)
&&
, ||
) та аналогічні побітові оператори ( &
, |
). У чому між ними різниця? По-перше, побітові можна застосовувати до цілих чисел. Про це ми поговоримо трохи згодом. А по-друге, одні скорочені, інші — ні. Щоб зрозуміти, як виглядає скороченість, подивимося на вираз:
false AND x = ?
true OR x = ?
Тут x
може набувати будь-якого булевого значення. І загалом, згідно із законами логіки і таблицям істинності, незалежно від цього, буде x
true чи false , результатом першого висловлювання буде false , а результатом другого буде true . Дивись.
![Знайомство з операторами Java: логічні, арифметичні, побітові - 17](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738177183.gif)
&&
та ||
. У виразах, аналогічних описаним вище, вони обчислюють значення другого операнда. Ось невеликий приклад:
![Знайомство з операторами Java: логічні, арифметичні, побітові - 18](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738195986.gif)
Побітові операції в Java
Ну ось ми і підібралися до найцікавішого: побітових операцій. Як можна зрозуміти з назви, це операції, які здійснюються над бітами. Але перш ніж ми поринемо в цю тему, варто поговорити про суміжні області.Подання чисел у двійковій системі числення
Числа, як і будь-яка інша інформація у програмі, зберігаються у пам'яті комп'ютера в двійковому коді. Двійковий код — набір нулів та одиниць. Кожен нуль чи одиниця є одиницю виміру інформації, яка називається біт.Відповідно до Вікіпедії:
Біт (від англ. binary digit - двійкове число; також гра слів: англ. bit - шматочок, частка) - одиниця виміру кількості інформації. 1 біт інформації - це символ або сигнал, який може приймати два значення: увімкнено або вимкнено, так чи ні, високий або низький, заряджений або незаряджений; у двійковій системі обчислення це 1 (одиниця) або 0 (нуль).З якими даними працюють побітові оператори?
Побітові операції в Java здійснюються лише над цілими числами. Цілі числа зберігаються в пам'яті комп'ютера у вигляді набору бітів. Можна сказати, що комп'ютер переводить будь-яку інформацію в двійкову систему числення (у набір бітів) і потім взаємодіє з нею. Але як влаштовано двійкову систему числення? У десятковій системі числення ми маємо всього 10 символів: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. За допомогою цих символів ми ведемо рахунок. Після 9 йде 10, після 19 - 20, після 99 - 100, після 749 - 750. Тобто ми використовуємо комбінацію 10 символів і можемо з їх допомогою вважати «від нуля і до обіду». У двійковій системі числення замість десяти символів є лише два — 0, 1. Але комбінуючи ці символи за тим самим принципом, що й у десятковій системі, можна вважати нескінченно довго.![Знайомство з операторами Java: логічні, арифметичні, побітові - 11](https://cdn.javarush.com/images/article/ac241c7f-9d09-4c1b-83c2-7ef2dc4703a5/original.jpeg)
00000000 - 1 байт
10110010 - 1 байт
01011011 - 1 байт
Кількість можливих неповторних комбінацій бітів в одному байті - 256 ( 28 = 256). Але повернемось ближче до Java. Є такий цілий тип даних — byte
. Даний тип може набувати значень від -128 до 127 і одне число в пам'яті комп'ютера займає рівно 8 біт, або 1 байт. Одне число цього займає рівно 1 byte
пам'яті комп'ютера. І тут назви збігаються невипадково. Як ми пам'ятаємо, один байт може зберігати 256 різних значень. І одне число типу byte
може набувати 256 різних значень (128 негативних, 127 позитивних і 1 нуль). Кожному значенню числа byte
відповідає унікальний набір із восьми бітів. Так справи як з типом byte
, а й з усіма цілими типами. Типbyte
наведено як найменший. Нижче в таблиці представлені всі цілі численні типи Java і займане ними місце в пам'яті: ![Знайомство з операторами Java: логічні, арифметичні, побітові - 12](https://cdn.javarush.com/images/article/3f53b58a-9f56-4322-82f7-4ecccf861ad4/1024.jpeg)
int
. Він може зберігати 2147483648 негативних, 2147483647 позитивних значень та один нуль. Разом:
2147483648 + 2147483647 + 1 = 4294967296.
Цей тип займає в пам'яті комп'ютера 32 біти. Кількість можливих комбінацій з набору 32 нулів і одиниць дорівнює:
232 = 4294967296.
Те саме число, що й у кількості значень, що вміщуються у тип int
. Це лише демонстрація взаємозв'язку між діапазоном значень типу даних та її розміром (кількість біт у пам'яті). Будь-яке число будь-якого типу Java можна перевести в двійкову систему числення. Давайте подивимося, як легко це можна зробити це за допомогою Java мови. Вчимося на прикладі типу int
. Даний тип має свій клас-обгортка — Integer
. А в нього - toBinaryString
, який і зробить за нас усю роботу:
![Знайомство з операторами Java: логічні, арифметичні, побітові - 21](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738209148.gif)
int
число займає 32 біти. Але коли ми виводимо число 10 у прикладі вище, бачимо в консолі 1010. Це тому, що провідні нулі не виводяться на друк. Якби вони виводабося, замість 1010 ми б бачабо в консолі 0000000000000000000000000001010. Але для зручності сприйняття всі провідні нулі опускаються. Не так вже й складно доти, доки не задаси питанням: а що з негативними числами? Він сприймає інформацію лише у двійковій системі. Виходить, що знак мінус також потрібно прописувати двійковим кодом. Це можна зробити за допомогою прямого чи додаткового коду.
Прямий код
Спосіб подання чисел у двійковій системі числення, у якому старший розряд (крайній лівий біт) відводиться під знак числа. Якщо число позитивне, крайній лівий біт записується 0, якщо негативне - 1.![Знайомство з операторами Java: логічні, арифметичні, побітові - 13](https://cdn.javarush.com/images/article/bf88eef7-8d01-4b01-aece-03e3d5ca1c58/original.jpeg)
Додатковий код
Використовуючи додатковий код, можна уникнути недоліків прямого коду. Для отримання додаткового коду числа є нескладний алгоритм. Спробуймо отримати додатковий код числа -5. Уявімо це число за допомогою додаткового коду в двійковій системі числення. Крок 1. Отримуємо подання від'ємного числа за допомогою прямого коду. Для -5 це буде 10 000 101. Крок 2. Інвертуємо всі розряди, крім розряду знака. Замінимо всі нулі на одиниці, а одиниці на нулі скрізь, окрім крайнього лівого біта.
10000101 => 11111010
Крок 3. До отриманого значення додамо одиницю:
11111010 + 1 = 11111011
Готово. Ми отримали значення числа -5 у двійковій системі числення з використанням додаткового коду. Це важливо для розуміння подальшого матеріалу, так як Java для зберігання негативних чисел в бітах використовується додатковий код.
Типи побітових операцій
Тепер, коли ми розібралися з усіма вступними, поговоримо про побітові операції в Java. Побітова операція здійснюється над цілими числами і її результатом буде ціле число. У процесі число перетворюється на двійкову систему, над кожним бітом виконується операція, і результат наводиться назад у десяткову систему. Список операцій - у таблиці нижче:![Знайомство з операторами Java: логічні, арифметичні, побітові - 14](https://cdn.javarush.com/images/article/69429221-dae5-47f8-a8ca-48674eff2f6e/original.jpeg)
NOT
, AND
, OR
, XOR
. Згадаймо, що нещодавно ми розглядали таблиці істинності лише для логічних операндів. У разі самі операції застосовуються до кожного біту цілого числа.
Побітовий унарний оператор NOT ~
Цей оператор замінює всі нулі на одиниці, а одиниці - на нулі. Припустимо, у нас є число 10 у десятковій системі обчислення. У двійковій системі це число дорівнює 1010. Якщо застосувати до цього числа унарний побітовий оператор заперечення, ми отримаємо приблизно таке:![Знайомство з операторами Java: логічні, арифметичні, побітові - 15](https://cdn.javarush.com/images/article/16e7c459-501a-4441-98a8-12d4090f2da8/original.jpeg)
public static void main(String[] args) {
int a = 10;
System.out.println(" a = " + a + "; binary string: " + Integer.toBinaryString(a));
System.out.println("~a = " + ~a + "; binary string: " + Integer.toBinaryString(~a));
}
Тепер подивимося, що виведеться в консоль:
![Знайомство з операторами Java: логічні, арифметичні, побітові - 25](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738220058.gif)
![Знайомство з операторами Java: логічні, арифметичні, побітові - 26](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738276923.gif)
Побітовий оператор AND
Цей оператор застосовується до двох чисел. Він здійснює операціюAND
між бітами кожного числа. Розглянемо приклад: ![Знайомство з операторами Java: логічні, арифметичні, побітові - 16](https://cdn.javarush.com/images/article/9569f388-3d97-47df-8529-238eab6eb7af/original.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові - 28](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738289334.gif)
Побітовий оператор OR
OR застосуємо до двох чисел. Він робить операцію OR між бітами кожного числа:![Знайомство з операторами Java: логічні, арифметичні, побітові - 17](https://cdn.javarush.com/images/article/99f418be-4d04-4b1d-8e75-65b0aa23726f/original.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові – 30](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738302264.gif)
Побітова операція, що виключає АБО (XOR)
Погляньмо на той самий приклад, але з новою операцією:![Знайомство з операторами Java: логічні, арифметичні, побітові - 18](https://cdn.javarush.com/images/article/2201b0e7-c013-46ec-b902-aaa3100510c9/original.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові - 32](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738323975.gif)
Побітове зрушення вліво
Цей оператор застосовний до двох операндам, тобто у операціїx << y
, біти числа x
зрушать на y
позицій вліво. Що це означає? Розглянемо на прикладі операції 10 << 1
![Ознайомлення з операторами Java: логічні, арифметичні, побітові - 19](https://cdn.javarush.com/images/article/727865e7-1477-4673-8ed3-d5adcd6241b3/original.jpeg)
-
Зсуваючи біти числа
X
наN
бітів вліво, ми множимо числоX
на 2 N .Ось приклад:
-
Але! У нас може змінитися знак числа, якщо біт зі значенням 1 займе крайнє ліве положення.
-
Якщо здійснювати зсув вліво нескінченно довго, число просто перетвориться на 0. Продемонструємо пункти 2 і 3:
Побітове зрушення вправо
Цей оператор застосовний до двох операндам. Тобто. в операціїx >> y
біти числа x
зрушать на y
позицій вправо. Розглянемо інший приклад. Схематично розберемо операцію 10 >> 1
. Зрушимо всі біти числа 10 одну позицію вправо: ![Знайомство з операторами Java: логічні, арифметичні, побітові - 20](https://cdn.javarush.com/images/article/091dad90-f41e-4c23-9722-29efdcf15b21/original.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові - 21](https://cdn.javarush.com/images/article/40672850-4560-4f39-9907-0761baa32be9/original.jpeg)
![Знайомство з операторами Java: логічні, арифметичні, побітові - 38](https://pics.esputnik.com/repository/home/37116/images/msg/41711174/1559738376872.gif)
X
на N
біт вправо, ми ділимо число X
на 2 в ступеня N
. Демонстрація:
public class BitOperationsDemo {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
int shiftOperationResult = 2048 >> i;
int devideOperationResult = 2048 / (int) Math.pow(2, i);
System.out.println(shiftOperationResult + " - " + devideOperationResult);
}
}
}
Що тут відбувається?
-
Цикл, у якому змінна i збільшується від 1 до 10.
- Кожну ітерацію ми обчислюємо 2 значення:
-
в змінну
shiftOperationResult
записуємо результат зсуву числа 2048 на бітів i вправо; -
в змінну
devideOperationResult
записуємо результат розподілу числа 2048 на 2 ступеня i. -
Попарно виводимо два отримані значення.
Побитовий зсув праворуч із заповненням нулями
Якщо звичайний зсув бітів праворуч зберігає знак числа (старший біт зберігає своє значення), у випадку зі зсувом праворуч із заповненням нулями цього не відбувається. А відбувається заповнення старшого біта банкрутом. Давай подивимося, як це виглядає:![Знайомство з операторами Java: логічні, арифметичні, побітові - 22](https://cdn.javarush.com/images/article/c820c7f5-1cf3-4917-814a-2e4ec737f655/original.jpeg)
Пріоритет операцій на Java
Як і в математиці, Java має пріоритет операцій. У таблиці нижче наведено пріоритет (від найвищого до нижчого) розглянутих нами операцій.![Знайомство з операторами Java: логічні, арифметичні, побітові - 23](https://cdn.javarush.com/images/article/ced4f04c-6e9c-47ae-82b4-8412751584b5/original.jpeg)
Корисні приклади використання
Визначення парності числа
![Знайомство з операторами Java: логічні, арифметичні, побітові - 24](https://cdn.javarush.com/images/article/3a8719c1-24f1-4930-90c7-5c09944e90ae/original.jpeg)
Пошук максимального елемента у масиві
![Знайомство з операторами Java: логічні, арифметичні, побітові - 25](https://cdn.javarush.com/images/article/2d3716f8-efc9-4f2d-b3ad-656d487f29f7/original.jpeg)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ