Перейти до вмісту
Обране

Калькулятор двійкових чисел

Оновлено:

Обчислюйте з двійковими числами: додавання, віднімання, множення, ділення з остачею, побітові операції AND, OR, XOR, NOT, а також зсуви бітів уліво й управо. Введіть два двійкові значення й отримайте точні результати у двійковій, десятковій, шістнадцятковій і вісімковій системах, з покроковим розв’язанням.

Додавання, віднімання, множення та побітові операції з двійковими числами

Поля введення
Лише цифри 0 і 1 та необов’язковий мінус спереду; внутрішні пробіли ігноруються. До 1024 цифр.
Другий операнд; для зсувів це величина зсуву в двійковому вигляді.
Якщо увімкнено, результат оновлюватиметься автоматично після зміни будь-якого значення.

Двійкова арифметика — основні правила

Формула
\[ b_{n-1}\,b_{n-2}\,\ldots\,b_1\,b_0 \;=\; \sum_{i=0}^{n-1} b_i \cdot 2^i \]

Де:

  • \(b_i\) — окремий біт, тобто 0 або 1
  • \(i\) — позиція біта, яку відраховують справа, починаючи з 0
  • \(2^i\) — вага розряду (позиційна вага)

У двійкових числах використовують лише цифри 0 і 1, а кожна позиція має значення, кратне степеню 2. Арифметика працює точно так само, як десяткова, лише з таблицями розрядів за основою 2: при додаванні \(0+0=0\), \(0+1=1\), а \(1+1=10_2\) (записуємо 0, переносимо 1); при відніманні \(1-0=1\), \(1-1=0\), а \(0-1\) позичає 1 з наступного розряду (вартістю 2), щоб записати 1.

Побітові операції обчислюють так: кожен біт результату залежить лише від двох однойменних бітів операндів — ніби числа записали одне під одним. Зсув уліво на \(k\) позицій множить число на \(2^k\) у межах слова фіксованої розрядності, а арифметичний зсув управо на \(k\) ділить на \(2^k\) з округленням до \(-\infty\).

Калькулятор двійкових чисел — приклад обчислення

Приклад: додайте двійкові числа A = 1011 і B = 0110 (типові значення калькулятора).

Спочатку переведіть обидва числа в десяткову систему за вагами розрядів \(2^3, 2^2, 2^1, 2^0\):

\[ 1011_2 = 8 + 0 + 2 + 1 = 11_{10}, \qquad 0110_2 = 0 + 4 + 2 + 0 = 6_{10} \]

Тепер додавайте розряд за розрядом справа, переносячи 1 щоразу, коли сума в розряді досягає 2 або більше:

\[ 1011_2 + 0110_2 = 10001_2 \]

Перевірка в десятковій системі: \(11 + 6 = 17\), і справді \(10001_2 = 16 + 1 = 17\).

Результат: 10001 у двійковій системі, 17 у десятковій, 0x11 у шістнадцятковій та 0o21 у вісімковій.

Як користуватися калькулятором

  1. Виберіть Операцію зі спадного списку: додавання, віднімання, множення, ділення з остачею, одну з побітових операцій (AND, OR, XOR, NOT) або зсув бітів (A << B, A >> B).
  2. Введіть Перше число (A), використовуючи лише цифри 0 і 1; для від’ємних значень можна поставити мінус на початку. Пробіли всередині числа ігноруються.
  3. Так само введіть Друге число (B). Для NOT використовується лише A; для зсувів B — це величина зсуву (її також записують у двійковій системі).
  4. Для NOT, зсуву уліво та зсуву управо виберіть Розрядність (8, 16, 32 або 64 біти). Результат цих трьох операцій — слово у додатковому коді такої розрядності.
  5. Зчитайте Результати: відповідь у двійковій системі та її десяткові, шістнадцяткові й вісімкові еквіваленти. Для ділення також показується остача, а на панелі Кроки обчислення пояснено, як отримано відповідь.

Що таке двійкова арифметика

Двійкова система — це система числення цифрової техніки: біт дорівнює 0 або 1, тому що транзистор або закритий, або відкритий. Кожне двійкове число — це послідовність бітів, у якій позиція \(i\) справа має вагу \(2^i\). Тому 1011 — це не «тисяча одинадцять», а \(1\cdot8 + 0\cdot4 + 1\cdot2 + 1\cdot1 = 11\). Щойно ви починаєте читати числа таким чином, усі чотири базові операції виконуються звичним шкільним методом — просто перенос робиться при 2, а не при 10.

Побітові операції працюють інакше: вони обробляють кожен розряд незалежно, саме тому вони ідеально підходять для масок і прапорців. AND двох чисел зберігає лише біти, встановлені в обох; OR — біти, встановлені хоча б в одному; XOR — біти, встановлені рівно в одному. У таблиці нижче показано правило для окремого розряду:

A B A AND B A OR B A XOR B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Зсуви — це двійковий спосіб масштабування на степені двійки. Зсув 1011 уліво на 2 дає 101100, тобто \(11 \times 4 = 44\) — за умови, що жоден біт не «випаде» за ліву межу слова. Саме тому розрядність має значення: у 32-бітному регістрі 1, зсунута уліво на 31, дає цілком коректний результат, але при зсуві на 32 біт зникає, і результат стає 0. Програмісти застосовують це всюди — від масок зображень до розподілу IP-підмереж, де калькулятор CIDR застосовує ту саму логіку бітових масок до діапазонів адрес.

Якщо вам потрібно перевести одне число з однієї системи в іншу, а не виконувати операції з двома числами, скористайтеся Конвертером двійкових чисел; Конвертер шістнадцяткових чисел робить те саме для шістнадцяткового запису, який програмісти часто обирають.

Припущення, обмеження та поради

  • До 1024 бітів на введення. Всі обчислення виконуються в точній цілочисельній арифметиці, тож навіть дуже довгі двійкові числа дають точну відповідь — без округлень і переповнень в режимах додавання, віднімання, множення, ділення та побітових операцій.
  • NOT і зсуви мають фіксовану розрядність. Вони обчислюються в межах обраної вами розмірності слова — точно так, як у регістрі процесора. Шістнадцяткові та вісімкові результати цих операцій показуються як беззнакові бітові шаблони цієї розрядності з ведучими нулями.
  • Ділення усікається до нуля і повертає остачу — так само, як оператори / та % у JavaScript, C і Java: A = B × Q + R, де |R| < |B|, а R має знак A.
  • Покрокові таблиці (рядки переносів, рядки позичань, побітові розряди) будуються для введених чисел довжиною до 64 бітів, а для множення — до 24 встановлених бітів у B; довші числа все одно обчислюються точно, просто без наочного покрокового розбору.
  • Ведучі нулі нічого не змінюють чисельно — 0110 і 110 обидва дорівнюють 6, — але для NOT і зсувів саме вони визначають форму слова, тож якщо вам важливе доповнення нулями, вказуйте розрядність явно.
  • Від’ємні числа приймаються лише у формі «знак–величина» (мінус на початку); калькулятор перетворює їх внутрішньо та показує результат зі знаком мінус, а не у вигляді шаблона додаткового коду (окрім режиму NOT і зсувів).

Часті запитання

Як перевести двійкове число в десяткове вручну?

Запишіть над кожним бітом степені 2 справа наліво: 1, 2, 4, 8, 16 тощо, а потім додайте ті степені, під якими стоїть 1. Наприклад, \(1101_2 = 8 + 4 + 0 + 1 = 13\). Крайній правий біт (позиція 0) завжди має вагу \(2^0 = 1\), а кожен крок уліво подвоює вагу.

Як покроково перевести десяткове число в двійкове?

Послідовно діліть число на 2, записуючи остачу на кожному кроці, доки не дійдете до 0. Потім зчитайте остачі знизу вгору. Для 13: \(13 \div 2 = 6\) остача 1, \(6 \div 2 = 3\) остача 0, \(3 \div 2 = 1\) остача 1, \(1 \div 2 = 0\) остача 1 — послідовність остач 1101 і є двійковою формою.

Чому в двійковій системі 1 + 1 = 10?

Бо в двійковій системі немає цифри 2. Коли сума розряду досягає 2, ви записуєте 0 в цьому розряді та переносите 1 в наступний розряд ліворуч — точнісінько як перенос у десятковій системі, коли суму розряду перевищує 9. Тож \(1 + 1 = 10_2\), що читається «один — нуль»: двійковий запис двійки (одна двійка плюс нуль одиниць).

У чому різниця між AND, OR і XOR?

Усі три порівнюють числа розряд за розрядом. AND дає 1 лише там, де обидва операнди мають 1 — зручно для видобуття або маскування бітів. OR дає 1 там, де хоча б один операнд має 1 — зручно для встановлення бітів. XOR дає 1 там, де рівно один операнд має 1 — зручно для перемикання бітів, причому XOR числа з самим собою завжди дорівнює 0.

Навіщо для NOT і зсувів обирати розрядність?

NOT і зсуви змінюють кількість бітів у результаті, тому відповідь залежить від розміру контейнера — так само, як і в регістрі процесора. У межах 8-бітного слова NOT 0000 0101 інвертує кожен біт, включно з ведучими нулями, і дає 1111 1010. Так само зсув уліво на k позицій множить число на \(2^k\) лише тоді, коли жоден біт не випадає за ліву межу слова, — інакше значення «перевертається».

Що відбувається з від’ємними числами у двійковій системі?

Цей калькулятор приймає від’ємні значення у записі з ведучим мінусом і обчислює точні результати зі знаком. Однак для операцій NOT і зсувів із фіксованою розрядністю від’ємні числа підпорядковуються конвенції додаткового коду, за якою \(-A\) зберігається як \(2^w - A\) у w-бітному слові, а NOT A дорівнює \(-A - 1\). Саме тому NOT 0 за будь-якої розрядності дає результат −1.

Які типові помилки при двійковій арифметиці вручну?

Забути перенос, коли сума розряду досягає 2; позичати 10 замість 2 під час віднімання; помилково зчитувати результат як десяткові цифри (1011 — це одинадцять, а не «тисяча одинадцять»). Також стежте за напрямком зсуву: зсув уліво множить на \(2^k\), а зсув управо — ділить, відкидаючи остачу: зсув 1011 (11) управо на 1 дає 101 (5), а не 22.

Чи дає двійкове ділення дробовий результат?

Ні — цей калькулятор виконує цілочисельне ділення з остачею, як оператори / і % у JavaScript, C чи Java. Частка усікається до нуля, а остача задовольняє рівність A = B × Q + R і має знак діленого. Ділення на нуль відхиляється з повідомленням про помилку, оскільки частка в такому разі не визначена.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *