Двійкове кодування чисел – відео

Отже, природне для нас є десяткова система числення – це та, якою ми користуємося щодня. Для запису чисел у десятковій системі використовуються 10 знаків – арабські цифри від 0 до 9 (зверніть увагу: 9 на 1 менше за 10 – основу системи числення), кожен розряд числа записується однією цифрою і має певну “вагу”.

Наприклад, візьмемо число 284 – воно має 3 розряди. Згідно того, чому нас вчили у школі, це одиниці, десятки та сотні. Відповідно, “вага” цих розрядів становить 1, 10 та 100; або, виражаючи їх через нашу основу числення, 100, 101, 102 (зверніть увагу: розряди для цього нумеруються справа наліво). Знаючи вагу розрядів, ми легко можемо віднайти саме число: 2*100 + 8*10 + 4*1 = 284. Погодьтеся, для десяткової системи це було нескладно.

З будь-якої системи числення у десяткову

В обчислювальній техніці застосовується двійкова система, основою якої є двійка, а для запису чисел, відповідно, використовуються 0 або 1. Чому так? Тому що 0 або 1 простіше передавати між елементами ніж 10 різних значень, і зберігати в пам’яті 0 або 1 також простіше. За тим самим принципом працює і вона.

Наприклад, число 10010 (у двійковій системі). Звичайно, ваги розрядів вже не будуть десятками та сотнями, але так саме залишаються степенями основи системи числення, тобто 1=20, 2=21, 4=22, 8=23, 16=24. І тепер ми можемо легко перетворити це число у десяткову систему:

1*16 + 0*8 + 0*4 + 1*2 + 0*1 =
16 + 0 + 0 + 2 + 0 =
18.

Можете перевірити мене на калькуляторі.

Аналогічним чином можна перевести число з будь-якої системи числення у десяткову – це сума добутків значення кожного розряду на його вагу, де вага – це основа системи числення, піднесена у степінь, рівний порядковому номеру розряду справа наліво, починаючи з 0. Моторошно? Можемо порахувати ще трохи.

Шістнадцяткова система також дуже популярна – 2 розряди у ній позначають 1 байт даних. Так як арабських цифр не вистачає, в якості інших 6 символів використовуються латинські літери від A до F. Візьмемо 1A3F і переведемо в десяткову систему:

1*163 + A*162 + 3*161 + F*160 =
1*163 + 10*162 + 3*161 + 15*160 =
1*4096 + 10*256 + 3*16 + 15*1 =
4096 + 2560 + 48 + 15 =
6719.

Власне, система числення може мати будь-яку основу. Наприклад, в трійковій системі для позначення розрядів використовуватимуться 0, 1 та 2. Візьмемо якесь число: 210120:

2*35 + 1*34 + 0*33 + 1*32 + 2*31 + 0*30 =
2*243 + 1*81 + 0*27 + 1*9 + 2*3 + 0*1 =
486 + 81 + 0 + 9 + 6 + 0 =
582.

З десяткової системи числення у будь-яку іншу

Для того ж, щоб перевести число з десяткової системи у будь-яку іншу, слід виконати зворотні дії: ділити початкове число на ваги розрядів і отримати таким чином їх значення.

Або можна згадати, що кожний наступний розряд – по суті перенос того, що не вмістилося у попередній, і трохи спростити розрахунки: брати не початкове число, а те, що залишилося від попереднього ділення, ділити його прямо на основу і брати остачу від ділення.

Переведемо наше десяткове 284 в двійкову систему:

284 / 2 = 142 (це те, що не вміщається в нульовий розряд), остача 0 (те що вмістилося)
142 (те, що не вмістилося в попередній розряд) / 2 = 71, остача 0

71 / 2 = 35, остача 1
35 / 2 = 17, остача 1
17 / 2 = 8, остача 1
8 / 2 = 4, остача 0
4 / 2 = 2, остача 0
2 / 2 = 1, остача 0
1 / 2 = 0, остача 1, далі немає куди ділити

Тепер ці остачі від останньої до першої – це і є розряди двійкового числа: 100011100

Або 582 назад у трійкову:
582 / 3 = 194, остача 0
194 / 3 = 64, остача 2
64 / 3 = 21, остача 1
21 / 3 = 7, остача 0
7 / 3 = 2, остача 1
2 / 3 = 0, остача 2

Записуємо остачі від останньої до першої – 210120 – те саме число, яке ми переводили з трійкової системи, отже все вірно.

З будь-якої в будь-яку

Все так само 🙂 Просто арифметичні операції доведеться проводити не в десятковій системі. Тому простіше перевести число з початкової системи числення в десяткову, а те, що отримаємо – в ту, яка нам необхідна.