двійкове кодування

Одиночний цифровий сигнал не дуже інформативний, адже він може приймати тільки два значення: нуль і одиниця. Тому в тих випадках, коли необхідно передавати, обробляти або зберігати великі обсяги інформації, зазвичай застосовують кілька паралельних цифрових сигналів. При цьому всі ці сигнали повинні розглядатися тільки одночасно, кожен з них окремо не має сенсу. У таких випадках говорять про довічних кодах, тобто про коди, утворених цифровими (логічними, двійковими) сигналами. Кожен з логічних сигналів, що входять в код, називається розрядом. Чим більше розрядів входить в код, тим більше значень може приймати даний код.

На відміну від звичного для нас десяткового кодування чисел, тобто коду з підставою десять, при довічним кодуванні в підставі коду лежить число два (рис. 2.9). Тобто кожна цифра коду (кожен розряд) двійкового коду може приймати не десять значень (як в десятковому коді: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9), а всього лише два - 0 і 1. Система позиційної записи залишається такою ж, тобто праворуч пишеться наймолодший розряд, а зліва - найстарший. Але якщо в десятковій системі вага кожного наступного розряду більше ваги попереднього в десять разів, то в двійковій системі (при довічним кодуванні) - в два рази. Кожен розряд двійкового коду називається біт (від англійського "Binary Digit" - "двійковечисло").


Мал. 2.9. Десяткове і двійкове кодування

У табл. 2.3 показано відповідність перших двадцяти чисел у десятковій і двійковій системах.

З таблиці видно, що необхідна кількість розрядів двійкового коду значно більше, ніж необхідну кількість розрядів десяткового коду. Максимально можливе число при кількості розрядів, що дорівнює трьом, становить при десятковій системі 999, а при двійковій - всього лише 7 (тобто 111 в двійковому коді). У загальному випадку n-розрядне двійкове число може приймати 2 n різних значень, а n-розрядне десяткове число - 10 n значень. Тобто запис великих двійкових чисел (з кількістю розрядів більше десяти) стає не дуже зручною.

Таблиця 2.3. Відповідність чисел у десятковій і двійковій системах

Для того щоб спростити запис двійкових чисел, була запропонована так звана Шістнадцяткова система (16-ковий кодування). В цьому випадку всі виконавчі розряди розбиваються на групи по чотири розряду (починаючи з молодшого), а потім вже кожна група кодується одним символом. Кожна така група називається напівбайтів (або ниббл. Тетрадой), а дві групи (8 розрядів) - байтом. З табл. 2.3 видно, що 4-розрядне двійкове число може приймати 16 різних значень (від 0 до 15). Тому необхідне число символів для шестнадцатиричного коду теж дорівнює 16, звідки і походить назва коду. Як перші 10 символів беруться цифри від 0 до 9, а потім використовуються 6 початкових заголовних букв латинського алфавіту: A, B, C, D, E, F.


Мал. 2.10. Двійкова і 16-ричная запис числа

У табл. 2.4 наведені приклади 16-ричного кодування перших 20 чисел (в дужках наведені двійкові числа), а на рис. 2.10 показаний приклад записи двійкового числа в 16-ковий вигляді. Для позначення 16-ричного кодування іноді застосовують букву "h" або "H" (від англійського Hexadecimal) в кінці числа, наприклад, запис A17F h позначає 16-ковий число A17F. Тут А1 являє собою старший байт числа, а 7F - молодший байт числа. Всі число (в нашому випадку - двухбайтовое) називається словом.

Таблиця 2.4. 16-річної системі кодування

Для перекладу 16-ричного числа в десяткове необхідно помножити значення молодшого (нульового) розряду на одиницю, значення наступного (першого) розряду на 16, другого розряду на 256 (162) і т.д. а потім скласти всі твори. Наприклад, візьмемо число A17F:

A17F = F * 16 0 + 7 * 16 1 + 1 * 16 2 + A * 16 3 = 15 * 1 + 7 * 16 + 1 * 256 + 10 * 4096 = 41343

Таблиця 2.5. 8-річної системі кодування

Але кожному фахівцю по цифровій апаратурі (розробнику, оператору, ремонтникові, програмісту і т.д.) необхідно навчитися так само вільно поводитися з 16-річної і двійковій системами, як і зі звичайною десяткової, щоб ніяких переказів з системи в систему не було потрібно.

Значно рідше, ніж 16-ковий, використовується вісімкове кодування, яке будується за таким же принципом, що і 16-ковий, але виконавчі розряди розбиваються на групи по три розряди. Кожна група (розряд коду) потім позначається одним символом. Кожен розряд 8-ричного коду може приймати вісім значень: 0, 1, 2, 3, 4, 5, 6, 7 (табл. 2.5).

Крім розглянутих кодів, існує також і так зване двійково-десяткове представлення чисел. Як і в 16-ковий коді, в двійковій-десятковому коді кожному розряду коду відповідає чотири двійкових розряди, проте кожна група з чотирьох двійкових розрядів може приймати не шістнадцять, а тільки десять значень, що кодуються символами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. тобто одному десятковому розряду відповідає чотири довічних. В результаті виходить, що написання чисел в двійковій-десятковому коді нічим не відрізняється від написання в звичайному десятковому коді (табл. 2.6), але в реальності це всього лише спеціальний двійковий код, кожен розряд якого може приймати тільки два значення: 0 і 1. двійковій-десятковий код іноді дуже зручний для організації десяткових цифрових індикаторів і табло.

Таблиця 2.6. Двійковій-десяткова система кодування

У двійковому коді над числами можна проробляти будь арифметичні операції: додавання, віднімання, множення, ділення.

Розглянемо, наприклад, складання двох 4-розрядних двійкових чисел. Нехай треба скласти число 0111 (десяткове 7) і 1011 (десяткове 11). Додавання цих чисел не складніше, ніж в десятковому поданні:

При додаванні 0 і 0 отримуємо 0, при додаванні 1 і 0 отримуємо 1, при додаванні 1 і 1 отримуємо 0 і перенесення в наступний розряд 1. Результат - 10010 (десяткове 18). При додаванні будь-яких двох n-розрядних двійкових чисел може вийти n-розрядний або (n + 1) -розрядної число.

Точно так же проводиться віднімання. Нехай з числа 10010 (18) треба відняти число 0111 (7). Записуємо числа з вирівнюванням по молодшого розряду і віднімаємо точно так же, як в разі десятковоїсистеми:

При відніманні 0 з 0 отримуємо 0, при відніманні 0 з 1 отримуємо 1, при відніманні 1 з 1 отримуємо 0, при відніманні 1 з 0 отримуємо 1 і позику 1 в наступному розряді. Результат - 1011 (десяткове 11).

При відніманні можливе отримання негативних чисел, тому необхідно використовувати двійкове подання негативних чисел.

Для одночасного подання як довічних позитивних, так і двійкових негативних чисел найчастіше використовується так званий додатковий код. Негативні числа в цьому коді виражаються таким числом, яке, будучи складено з позитивним числом такої ж величини, дасть в результаті нуль. Для того щоб отримати негативне число, треба поміняти всі біти такого ж позитивного числа на протилежні (0 на 1, 1 на 0) і додати до результату 1. Наприклад, запишемо число -5. Число 5 в двійковому коді виглядає 0101. Замінюємо біти на протилежні: 1010 і додаємо одиницю: 1011. Підсумовуємо результат з вихідним числом: 1011 + 0101 = 0000 (перенесення в п'ятий розряд ігноруємо).

Негативні числа в додатковому коді відрізняються від позитивних значенням старшого розряду: одиниця в старшому розряді визначає негативне число, а нуль - позитивне.

Крім стандартних арифметичних операцій, в двійковій системі числення використовуються і деякі специфічні операції, наприклад, складання по модулю 2. Ця операція (позначається A) є побітової, тобто ніяких переносів з розряду в розряд і позичок в старших розрядах тут не існує. Правила складання по модулю 2 наступні:. . . Ця ж операція називається функцією виключає Або. Наприклад, підсумуємо по модулю 2 два довічних числа 0111 і 1011:

Серед інших побітових операцій над двійковими числами можна відзначити функцію І і функцію АБО. Функція І дає в результаті одиницю тільки тоді, коли у відповідних бітах двох вихідних чисел обидві одиниці, в іншому випадку результат -0. Функція АБО дає в результаті одиницю тоді, коли хоча б один з відповідних бітів вихідних чисел дорівнює 1, в іншому випадку результат 0.

Схожі статті