Побитовые операции в Java
В данной статье мы рассмотрим:
1. Что такое бит, история возникновения.
2. Побитовые операции в Java.
3. + в конце статьи будет бонус 🙂
Что такое бит. История возникновения
Бит - это то, на чем строится работа каждого компьютера. Перед тем как объяснить в чем же заключается работа с битами в Java, немного истории!
Жил был такой ученый Готфрид Вильгельм Лейбниц.
Может кто-то знает его за многочисленные заслуги в математике и не только:
- создание математического анализа - дифференциальное и интегральное исчисления;
- создал комбинаторику как науку;
- заложил основы математической логики;
- в физике сформулировал закон сохранения энергии;
- в психологии развил учение о бессознательной психической жизни;
- и именно он описал двоичную систему счисления с цифрами 0 и 1.
Одним словом - был серьезным ученым. И вот в 1703 году он описал двоичную систему исчисления с цифрами 0 и 1. В своей работе он упоминал, что двоичная система исчисления существовала в Китае много-много лет до того как он взялся за ее изучение. Она была описана великим Китайским императором и философом по имени Fu Xi (Фу Си), который жил еще более, чем за 4000 лет до Лейбница.
Китайский император описывал Инь и Ян как инь-ян ("0"-"1"), китайский двоичный разряд, китайский бит. Другими словами можно сделать вывод, что двоичная система исчисления за долго до компьютеров уже имела огромную силу и большую историю!
Сегодня представление и обработка любой информации в компьютере представлена в виде двоичной системы исчислений. Сам бит - это единица измерения информации, 1 или 0, да или нет.
Всем известна Дездемона из пьесы Уильяма Шекспира "Отелло". И на вопрос "Молилась ли ты на ночь Дездемона?", она могла бы ответить вот таким способом:
Тоесть, 1 это ДА, а 0 это НЕТ!
Любое число можно перевести в последовательность Битов!
Например:
- число 0 - (представление в битах) 0 0
- число 1 - (представление в битах) 0 1
- число 2 - (представление в битах) 1 0
- число 3 - (представление в битах) 1 1
- число 4 - (представление в битах) 1 0 0
- число 5 - (представление в битах) 1 0 1
- число 6 - (представление в битах) 1 1 0
- число 7 - (представление в битах) 1 1 1
- число 8 - (представление в битах) 1 0 0 0
- число 9 - (представление в битах) 1 0 0 1
- число 10 - (представление в битах) 1 0 1 0
- число 15 - (представление в битах) 1 1 1 1
- число 20 - (представление в битах) 1 0 1 0 0
- число 25 - (представление в битах) 1 1 0 0 1
- число 31 - (представление в битах) 1 1 1 1 1
Компьютер хранит в своей памяти таким образом любые символы (цифры, буквы, знаки препинания и т.д.) и для этого использует определенное количество бит. Компьютер распознает 256 (от 0 до 255) различных символов по их коду, чтобы вместить все цифры, буквы и много других символов.
Для представления символа с максимальным кодом, то есть 255 - нужно 8 бит. Эти 8 бит называются байтом. Один любой символ - это всегда 1 байт.
Но вернемся к Java!
- Что можно делать с битами с помощью языка программирования Java?
- Побитовые операции!
Побитовые операции в Java можно проводить только над целочисленными типами данных. То есть long, int, short, char, byte.
Разница в работе с целочисленными значениями только в том сколько они хранят в себе диапазон допустимых значений.
Существуют следующие побитовые операторы в Java:
Побитовый унарный оператор NOT
Или
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class Test { public static void main(String[] args) { System.out.println("Пример работы с типом byte"); byte a = 47; byte b = (byte) ~a; System.out.println(b); System.out.println("Пример работы с типом short"); short c = 350; short d = (short) ~c; System.out.println(d); System.out.println("Пример работы с типом int"); int e = 555555555; int f = ~e; System.out.println(f); System.out.println("Пример работы с типом long"); long g = 111112222233333L; long h = ~g; System.out.println(h); } } |
Вывод:
Комментарии:
Уже говорилось, что число для компьютера - это последовательность битов. А, значит, и следующие числа так же можно представить в виде последовательности битов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public class Test { public static void main(String[] args) { System.out.println("Пример работы с типом byte"); byte a = 47; byte b = (byte) ~a; System.out.println(b); System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа:" + b + " в двоичной системе исчисления: " + Integer.toBinaryString(b) + "\n"); System.out.println("Пример работы с типом short"); short c = 350; short d = (short) ~c; System.out.println(d); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); System.out.println("Представление числа:" + d + " в двоичной системе исчисления: " + Integer.toBinaryString(d) + "\n"); System.out.println("Пример работы с типом int"); int e = 555555555; int f = ~e; System.out.println(f); System.out.println("Представление числа: " + e + " в двоичной системе исчисления: " + Integer.toBinaryString(e)); System.out.println("Представление числа:" + f + " в двоичной системе исчисления: " + Integer.toBinaryString(f) + "\n"); System.out.println("Пример работы с типом long"); long g = 111112222233333L; long h = ~g; System.out.println(h); System.out.println("Представление числа: " + g + " в двоичной системе исчисления: " + Long.toBinaryString(g)); System.out.println("Представление числа:" + h + " в двоичной системе исчисления: " + Long.toBinaryString(h) + "\n"); } } |
Вывод:
Чтобы сделать инверсию - в числе (в представлении последовательности битов) каждый бит меняется на противоположный.
Но чтобы получить наше число правильно инвертированным, нужно к числу добавить 1.
Побитовый AND
Как заметно, побитовая операция AND, не равна арифметической операции "плюс"!
Другими словами 1(правда) выйдет только тогда когда обе части правда (1 & 1 - оба правда).
Например:
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Test { public static void main(String[] args) { System.out.println("Пример:"); int a = 7; int b = 5; int c = a & b; System.out.println(b); System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + b + " в двоичной системе исчисления: " + Integer.toBinaryString(b)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); } } |
Вывод:
Побитовый OR
Другими словами, если хоть одна часть правда, тогда все правда (0 | 1 → 1).
Например:
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Test { public static void main(String[] args) { System.out.println("Пример:"); int a = 7; int b = 5; int c = a | b; System.out.println(b); System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + b + " в двоичной системе исчисления: " + Integer.toBinaryString(b)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); } } |
Вывод:
Побитовый исключающее OR - XOR
Другими словами, обе части должны отличаться друг от друга (0 ^ 1 → 1) но (1 ^ 1 → 0).
Например:
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Test { public static void main(String[] args) { System.out.println("Пример:"); int a = 7; int b = 5; int c = a ^ b; System.out.println(b); System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + b + " в двоичной системе исчисления: " + Integer.toBinaryString(b)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); } } |
Вывод:
Сдвиг вправо vs Сдвиг влево
Двойка правит миром!
Конечно это шутка, но в каждой шутке есть доля шутки, а все остальное правда. С побитовыми сдвигами именно такая ситуация. При сдвиге бита вправо или влево, по сути Вы умножаете или делите число на 2. Есть, конечно, свои нюансы, но сначала пример.
Сдвиг влево
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { int a = 1; int b = 1; for (int i = 0; i < 10; i++) { System.out.println("Умножим: " + a + " на 2"); int c = a << b; System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); System.out.println("Результат: " + c); a = c; } } } |
Вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Умножим: 1 на 2 Представление числа: 1 в двоичной системе исчисления: 1 Представление числа: 2 в двоичной системе исчисления: 10 Результат: 2 Умножим: 2 на 2 Представление числа: 2 в двоичной системе исчисления: 10 Представление числа: 4 в двоичной системе исчисления: 100 Результат: 4 Умножим: 4 на 2 Представление числа: 4 в двоичной системе исчисления: 100 Представление числа: 8 в двоичной системе исчисления: 1000 Результат: 8 Умножим: 8 на 2 Представление числа: 8 в двоичной системе исчисления: 1000 Представление числа: 16 в двоичной системе исчисления: 10000 Результат: 16 Умножим: 16 на 2 Представление числа: 16 в двоичной системе исчисления: 10000 Представление числа: 32 в двоичной системе исчисления: 100000 Результат: 32 Умножим: 32 на 2 Представление числа: 32 в двоичной системе исчисления: 100000 Представление числа: 64 в двоичной системе исчисления: 1000000 Результат: 64 Умножим: 64 на 2 Представление числа: 64 в двоичной системе исчисления: 1000000 Представление числа: 128 в двоичной системе исчисления: 10000000 Результат: 128 Умножим: 128 на 2 Представление числа: 128 в двоичной системе исчисления: 10000000 Представление числа: 256 в двоичной системе исчисления: 100000000 Результат: 256 Умножим: 256 на 2 Представление числа: 256 в двоичной системе исчисления: 100000000 Представление числа: 512 в двоичной системе исчисления: 1000000000 Результат: 512 Умножим: 512 на 2 Представление числа: 512 в двоичной системе исчисления: 1000000000 Представление числа: 1024 в двоичной системе исчисления: 10000000000 Результат: 1024 |
Другими словами видно что бит "1", каждый раз сдвигается влево и доставляет справа бит "0".
Сдвиг вправо
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { int a = 1024; int b = 1; for (int i = 0; i < 10; i++) { System.out.println("Поделим: " + a + " на 2"); int c = a >> b; System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); System.out.println("Результат: " + c); a = c; } } } |
Вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Поделим: 1024 на 2 Представление числа: 1024 в двоичной системе исчисления: 10000000000 Представление числа: 512 в двоичной системе исчисления: 1000000000 Результат: 512 Поделим: 512 на 2 Представление числа: 512 в двоичной системе исчисления: 1000000000 Представление числа: 256 в двоичной системе исчисления: 100000000 Результат: 256 Поделим: 256 на 2 Представление числа: 256 в двоичной системе исчисления: 100000000 Представление числа: 128 в двоичной системе исчисления: 10000000 Результат: 128 Поделим: 128 на 2 Представление числа: 128 в двоичной системе исчисления: 10000000 Представление числа: 64 в двоичной системе исчисления: 1000000 Результат: 64 Поделим: 64 на 2 Представление числа: 64 в двоичной системе исчисления: 1000000 Представление числа: 32 в двоичной системе исчисления: 100000 Результат: 32 Поделим: 32 на 2 Представление числа: 32 в двоичной системе исчисления: 100000 Представление числа: 16 в двоичной системе исчисления: 10000 Результат: 16 Поделим: 16 на 2 Представление числа: 16 в двоичной системе исчисления: 10000 Представление числа: 8 в двоичной системе исчисления: 1000 Результат: 8 Поделим: 8 на 2 Представление числа: 8 в двоичной системе исчисления: 1000 Представление числа: 4 в двоичной системе исчисления: 100 Результат: 4 Поделим: 4 на 2 Представление числа: 4 в двоичной системе исчисления: 100 Представление числа: 2 в двоичной системе исчисления: 10 Результат: 2 Поделим: 2 на 2 Представление числа: 2 в двоичной системе исчисления: 10 Представление числа: 1 в двоичной системе исчисления: 1 Результат: 1 |
Другими словами видно что бит "1" каждый раз сдвигается вправо и убирает справа бит "0".
А что если другие числа не кратные двум? В таком случае, если число нацело не делится, тогда оно уменьшается на остаток от деления или на единицу, чтобы таким образом трансформироваться в кратное двум! Возьмем число 35 к примеру.
Сдвиг вправо
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { int a = 35; int b = 1; for (int i = 0; i < 7; i++) { System.out.println("Поделим: " + a + " на 2"); int c = a >> b; System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); System.out.println("Результат: " + c); a = c; } } } |
Вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Поделим: 35 на 2 Представление числа: 35 в двоичной системе исчисления: 100011 Представление числа: 17 в двоичной системе исчисления: 10001 Результат: 17 Поделим: 17 на 2 Представление числа: 17 в двоичной системе исчисления: 10001 Представление числа: 8 в двоичной системе исчисления: 1000 Результат: 8 Поделим: 8 на 2 Представление числа: 8 в двоичной системе исчисления: 1000 Представление числа: 4 в двоичной системе исчисления: 100 Результат: 4 Поделим: 4 на 2 Представление числа: 4 в двоичной системе исчисления: 100 Представление числа: 2 в двоичной системе исчисления: 10 Результат: 2 Поделим: 2 на 2 Представление числа: 2 в двоичной системе исчисления: 10 Представление числа: 1 в двоичной системе исчисления: 1 Результат: 1 Поделим: 1 на 2 Представление числа: 1 в двоичной системе исчисления: 1 Представление числа: 0 в двоичной системе исчисления: 0 Результат: 0 Поделим: 0 на 2 Представление числа: 0 в двоичной системе исчисления: 0 Представление числа: 0 в двоичной системе исчисления: 0 Результат: 0 |
Видно, что биты справа просто исчезают. А так же важно заметить, что когда число равно нулю, в таком случае при побитовом сдвиге вправо число останеться нулем!
Сдвиг влево
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { int a = 35; int b = 1; for (int i = 0; i < 7; i++) { System.out.println("Умножим: " + a + " на 2"); int c = a << b; System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); System.out.println("Результат: " + c); a = c; } } } |
Вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Поделим: 35 на 2 Представление числа: 35 в двоичной системе исчисления: 100011 Представление числа: 70 в двоичной системе исчисления: 1000110 Результат: 70 Умножим: 70 на 2 Представление числа: 70 в двоичной системе исчисления: 1000110 Представление числа: 140 в двоичной системе исчисления: 10001100 Результат: 140 Умножим: 140 на 2 Представление числа: 140 в двоичной системе исчисления: 10001100 Представление числа: 280 в двоичной системе исчисления: 100011000 Результат: 280 Умножим: 280 на 2 Представление числа: 280 в двоичной системе исчисления: 100011000 Представление числа: 560 в двоичной системе исчисления: 1000110000 Результат: 560 Умножим: 560 на 2 Представление числа: 560 в двоичной системе исчисления: 1000110000 Представление числа: 1120 в двоичной системе исчисления: 10001100000 Результат: 1120 Умножим: 1120 на 2 Представление числа: 1120 в двоичной системе исчисления: 10001100000 Представление числа: 2240 в двоичной системе исчисления: 100011000000 Результат: 2240 Умножим: 2240 на 2 Представление числа: 2240 в двоичной системе исчисления: 100011000000 Представление числа: 4480 в двоичной системе исчисления: 1000110000000 Результат: 4480 |
Видно, что биты справа просто добавляются. А так же важно заметить, что любое число, умноженное на два, обязательно кратное двум!
Еще расмотрим как ведет себя сдвиг вправо при отрицательных числах:
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { int a = -64; int b = 1; for (int i = 0; i < 7; i++) { System.out.println("Поделим: " + a + " на 2"); int c = a >> b; System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); System.out.println("Результат: " + c); a = c; } } } |
Вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Поделим: -64 на 2 Представление числа: -64 в двоичной системе исчисления: 11111111111111111111111111000000 Представление числа: -32 в двоичной системе исчисления: 11111111111111111111111111100000 Результат: -32 Поделим: -32 на 2 Представление числа: -32 в двоичной системе исчисления: 11111111111111111111111111100000 Представление числа: -16 в двоичной системе исчисления: 11111111111111111111111111110000 Результат: -16 Поделим: -16 на 2 Представление числа: -16 в двоичной системе исчисления: 11111111111111111111111111110000 Представление числа: -8 в двоичной системе исчисления: 11111111111111111111111111111000 Результат: -8 Поделим: -8 на 2 Представление числа: -8 в двоичной системе исчисления: 11111111111111111111111111111000 Представление числа: -4 в двоичной системе исчисления: 11111111111111111111111111111100 Результат: -4 Поделим: -4 на 2 Представление числа: -4 в двоичной системе исчисления: 11111111111111111111111111111100 Представление числа: -2 в двоичной системе исчисления: 11111111111111111111111111111110 Результат: -2 Поделим: -2 на 2 Представление числа: -2 в двоичной системе исчисления: 11111111111111111111111111111110 Представление числа: -1 в двоичной системе исчисления: 11111111111111111111111111111111 Результат: -1 Поделим: -1 на 2 Представление числа: -1 в двоичной системе исчисления: 11111111111111111111111111111111 Представление числа: -1 в двоичной системе исчисления: 11111111111111111111111111111111 Результат: -1 |
Так же, как и при положительных числа, только сохраняя свой знак "-".
Сдвиг вправо с заполнением нулями
Но в случае когда не нужно придерживаться знака "-", можно использовать сдвиг вправо с заполнением нулями ">>>" и в таком случае знак "-" исчезает.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Test { public static void main(String[] args) { int a = -1; int b = 1; for (int i = 0; i < 32; i++) { System.out.println("Число: " + a); int c = a >>> b; System.out.println("Представление числа: " + a + " в двоичной системе исчисления: " + Integer.toBinaryString(a)); System.out.println("Представление числа: " + c + " в двоичной системе исчисления: " + Integer.toBinaryString(c)); System.out.println("Результат: " + c); a = c; } } } |
Вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
Число: -1 Представление числа: -1 в двоичной системе исчисления: 11111111111111111111111111111111 Представление числа: 2147483647 в двоичной системе исчисления: 1111111111111111111111111111111 Результат: 2147483647 Число: 2147483647 Представление числа: 2147483647 в двоичной системе исчисления: 1111111111111111111111111111111 Представление числа: 1073741823 в двоичной системе исчисления: 111111111111111111111111111111 Результат: 1073741823 Число: 1073741823 Представление числа: 1073741823 в двоичной системе исчисления: 111111111111111111111111111111 Представление числа: 536870911 в двоичной системе исчисления: 11111111111111111111111111111 Результат: 536870911 Число: 536870911 Представление числа: 536870911 в двоичной системе исчисления: 11111111111111111111111111111 Представление числа: 268435455 в двоичной системе исчисления: 1111111111111111111111111111 Результат: 268435455 Число: 268435455 Представление числа: 268435455 в двоичной системе исчисления: 1111111111111111111111111111 Представление числа: 134217727 в двоичной системе исчисления: 111111111111111111111111111 Результат: 134217727 Число: 134217727 Представление числа: 134217727 в двоичной системе исчисления: 111111111111111111111111111 Представление числа: 67108863 в двоичной системе исчисления: 11111111111111111111111111 Результат: 67108863 Число: 67108863 Представление числа: 67108863 в двоичной системе исчисления: 11111111111111111111111111 Представление числа: 33554431 в двоичной системе исчисления: 1111111111111111111111111 Результат: 33554431 Число: 33554431 Представление числа: 33554431 в двоичной системе исчисления: 1111111111111111111111111 Представление числа: 16777215 в двоичной системе исчисления: 111111111111111111111111 Результат: 16777215 Число: 16777215 Представление числа: 16777215 в двоичной системе исчисления: 111111111111111111111111 Представление числа: 8388607 в двоичной системе исчисления: 11111111111111111111111 Результат: 8388607 Число: 8388607 Представление числа: 8388607 в двоичной системе исчисления: 11111111111111111111111 Представление числа: 4194303 в двоичной системе исчисления: 1111111111111111111111 Результат: 4194303 Число: 4194303 Представление числа: 4194303 в двоичной системе исчисления: 1111111111111111111111 Представление числа: 2097151 в двоичной системе исчисления: 111111111111111111111 Результат: 2097151 Число: 2097151 Представление числа: 2097151 в двоичной системе исчисления: 111111111111111111111 Представление числа: 1048575 в двоичной системе исчисления: 11111111111111111111 Результат: 1048575 Число: 1048575 Представление числа: 1048575 в двоичной системе исчисления: 11111111111111111111 Представление числа: 524287 в двоичной системе исчисления: 1111111111111111111 Результат: 524287 Число: 524287 Представление числа: 524287 в двоичной системе исчисления: 1111111111111111111 Представление числа: 262143 в двоичной системе исчисления: 111111111111111111 Результат: 262143 Число: 262143 Представление числа: 262143 в двоичной системе исчисления: 111111111111111111 Представление числа: 131071 в двоичной системе исчисления: 11111111111111111 Результат: 131071 Число: 131071 Представление числа: 131071 в двоичной системе исчисления: 11111111111111111 Представление числа: 65535 в двоичной системе исчисления: 1111111111111111 Результат: 65535 Число: 65535 Представление числа: 65535 в двоичной системе исчисления: 1111111111111111 Представление числа: 32767 в двоичной системе исчисления: 111111111111111 Результат: 32767 Число: 32767 Представление числа: 32767 в двоичной системе исчисления: 111111111111111 Представление числа: 16383 в двоичной системе исчисления: 11111111111111 Результат: 16383 Число: 16383 Представление числа: 16383 в двоичной системе исчисления: 11111111111111 Представление числа: 8191 в двоичной системе исчисления: 1111111111111 Результат: 8191 Число: 8191 Представление числа: 8191 в двоичной системе исчисления: 1111111111111 Представление числа: 4095 в двоичной системе исчисления: 111111111111 Результат: 4095 Число: 4095 Представление числа: 4095 в двоичной системе исчисления: 111111111111 Представление числа: 2047 в двоичной системе исчисления: 11111111111 Результат: 2047 Число: 2047 Представление числа: 2047 в двоичной системе исчисления: 11111111111 Представление числа: 1023 в двоичной системе исчисления: 1111111111 Результат: 1023 Число: 1023 Представление числа: 1023 в двоичной системе исчисления: 1111111111 Представление числа: 511 в двоичной системе исчисления: 111111111 Результат: 511 Число: 511 Представление числа: 511 в двоичной системе исчисления: 111111111 Представление числа: 255 в двоичной системе исчисления: 11111111 Результат: 255 Число: 255 Представление числа: 255 в двоичной системе исчисления: 11111111 Представление числа: 127 в двоичной системе исчисления: 1111111 Результат: 127 Число: 127 Представление числа: 127 в двоичной системе исчисления: 1111111 Представление числа: 63 в двоичной системе исчисления: 111111 Результат: 63 Число: 63 Представление числа: 63 в двоичной системе исчисления: 111111 Представление числа: 31 в двоичной системе исчисления: 11111 Результат: 31 Число: 31 Представление числа: 31 в двоичной системе исчисления: 11111 Представление числа: 15 в двоичной системе исчисления: 1111 Результат: 15 Число: 15 Представление числа: 15 в двоичной системе исчисления: 1111 Представление числа: 7 в двоичной системе исчисления: 111 Результат: 7 Число: 7 Представление числа: 7 в двоичной системе исчисления: 111 Представление числа: 3 в двоичной системе исчисления: 11 Результат: 3 Число: 3 Представление числа: 3 в двоичной системе исчисления: 11 Представление числа: 1 в двоичной системе исчисления: 1 Результат: 1 Число: 1 Представление числа: 1 в двоичной системе исчисления: 1 Представление числа: 0 в двоичной системе исчисления: 0 Результат: 0 |
Здесь видно, что знак "-" не сохраняется, тогда берется самое большое значение из допустимых в типе int и дальше все по старинке!
Внимание: необходимо аккуратно работать с разными типами данных в java. Типы данных byte и short приводятся автоматически к int.
Бонус!
Научимся с последовательности битов быстро получать числа! Для того, чтобы это выходило быстро, нужно выучить числа двойки в степени.
Посмотрим числа 2, 4, 8 - записываются в двоичной системе.
А теперь переведем число с двоичной в десятичную систему:
- Возьмите любое число, написанное с помощью двоичной системы исчисления.
- Там где ноль, всегда будет ноль.
- А там где единица - нужно поднести двойку в индекс, где находится единица.
- Просуммировать все эти числа!
Вуаля!
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля. Детальную информацию Вы можете найти у нас на сайте.