Запис двійкового числа як 1000100В - 1

— Привіт, Аміго!

— Привіт, Білаабо!

Хочу розповісти тобі трохи про різні системи числення.

Ти вже чув, що люди користуються десятковою системою числення. Ось головні факти цього підходу:

1) Для запису числа використовуються 10 цифр: 0,1, 2, 3, 4, 5, 6, 7, 8, 9.< /span>

2) Число 543 означає 5 сотень + 4 десятки + 3 одиниці.

Ця рівносильна запису 5*100 + 4*10 + 3*1, що можна записати як 5*102+4*101+3*10< sup>0

Зверни увагу – тисячі, сотні, десятки та одиниці – це ступеня числа 10.

1) Одиниця – це 10 у нульовому ступені.

2) Десять – це 10 у першому ступені

3) Сто – це 10 у другому ступені

4) Тисяча – це 10 у третьому ступені і т.д.

— Ага. Зрозуміло.

— А тепер уяви, що цифр всього 8. Тоді ми маємо вісімкову систему числення і ось її головні факти:

1) Для запису числа використовуються 8 цифр: 0,1, 2, 3, 4, 5, 6, 7.< /p>

2) Число 5438 означає 5*82+4*81+3*80. Тобто. це 5*64+4*8+3*1 = 320+32+3=35510

Я написав знизу числа знаки 8 та 10, щоб ми знали, скільки цифр використовується для його запису.

— Начебто і ясно. Я думаю, я зміг би перевести число з вісімкової системи до десяткової. Але навпаки – навряд.

— Все не так уже й складно. Уяви, що тобі потрібно перекласти купу піску на кількох вантажних машинах. У тебе є кар'єрні самоскиди, звичайні і зовсім маленькі машинки. Але треба, щоб машини не їхали напівпорожніми.

Як би ти возив?

— Спочатку я насипав би в кар'єрні самоскиди, вони найбільші. Потім, коли зрозумів, що для заповнення машини піску не вистачить, то перейшов би на менші машини. Потім ще менше.

— Тут все також дуже схоже. Давай спробуємо перевести число 35510 назад у вісімковий формат.

Спочатку ми розділимо його на 64 (82), отримаємо 5 цілих та 35 у залишку. Значить перша цифра нашого числа – 5. Потім розділимо залишок на 8(81), отримаємо 4 та 3 у залишку. Так і вийде число 5438.

Можна, до речі, піти і з іншого боку. Адже 5438 ==5*64+4*8+3 == ((5)*8+4)*8+3. Наші восьмеричні «десятки» та «сотні» обов'язково діляться на 8. Отже, залишок від поділу на 8 це і будуть наші восьмеричні одиниці.

Поділимо спочатку число 355 на 8. Отримаємо 44 та 3 у залишку. Тобто. 355 = 44 * 8 +3. А 44 можна як 5*8+4. Значить 355 = (5 * 8 +4) * 8 +3; Ось наші цифри: 5,4,3. 5438

— Загалом зрозуміло, але треба трохи попрактикуватися, щоб остаточно в усьому розібратися.

— У програмуванні дуже часто використовуються числа з різною основою (кількістю цифр). Найпопулярніші – це 2, 8, 10, 16, 64.

— А навіщо це потрібне. Навіщо потрібні числа, що складаються з 2, 8, 16 та 64 цифр?

— Справа у внутрішньому пристрої процесора. Дуже спрощено — якщо у дроті є струм, то кажуть, що в ньому "одиниця", якщо струму немає, то в ньому "нуль". Усі числа зберігаються у пам'яті у вигляді осередків. Влаштування таких осередків дуже примітивно. Вони також можуть зберігати лише 0 або 1.

Зате таке спрощення всього (тільки 0 або 1) дало можливість зробити елементи всередині процесора та пам'яті дуже маленькими. Сучасні процесори та модулі пам'яті включають мільярди різних елементів. При тому, що їхня площа часто не перевищує квадратного сантиметра.

— Нічого собі. Знатиму.

— Тепер перейдемо до двійкових чисел. Там те саме, що і з вісімковими, тільки ще простіше.

1) Для запису числа використовуються 2 цифри: 0,1

2) Число 1012 значить 1*22+0*21+1*20. Тобто. це 1*4+0*2+1*1 =4+1=510

— Так. Я пам'ятаю. Одна комірка, яка набуває значення 0 або 1 називається бітом. Але т.к. у ній можна зберегти дуже мало інформації, їх об'єднують у групи по 8. І називають таку групу – байтом.

— Саме. Байт – це група із восьми біт. У ньому можна зберігати значення: 00000000, 00000001, …, 11111111. Які відповідають десятковим 0,1, … 255. Всього 256 значень.

Яке найбільше ціле число в Java? Точніше його тип?

— long. long складається з 8 байт. Тобто. 64 біта і може зберігати значення від -263 до 263-1

— Ага. Я не торкатимуся теми, як переводити числа з десяткової системи в двійкову чи навпаки. Інакше лекція надто затягнеться.

Давай краще ще трохи розповім про 16-річну систему числення.

— Так дуже цікаво. Для двійкової та вісімкової систем ми просто викинули цифри починаючи з двійки чи вісімки. А як тут? Ми додамо нові цифри?

— Саме! Дивись:

1) Для запису числа використовуються 16 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A , B, C, D, E, F

2) Кількість 54316 значить 5*162+4*161+3*160. Тобто. це 5*256+4*16+3*1 =1280+64+3=134710

— Тобто. ми просто додали літери як цифри? Про_о

— Ага. А що в цьому такого? Навіщо вигадувати нові цифри, коли з цією роллю добре справляються літери. Ось дивись:

Шістнадцяткова цифра Десятичне значення
0 0
1 1
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15

Про переведення з десяткової системи до шістнадцяткової теж розповідати не буду. Натомість є один цікавий факт. Шістнадцяткова цифра – це рівно 4 біти зі значеннями від 0 до 15. Тому один байт можна записати вісьмома двійковими цифрами (0 або 1) або двома шістнадцятковими.

Приклад:

Десятичне число Двійкове число Шістнадцяткове число
0 0000 0000 00
1 0000 0001 01
15 0000 1111 0f
16 0001 0000 10
31 0001 1111 1f
32 0010 0000 20
128 1000 0000 80
129 1000 0001 81
255 1111 1111 ff

Шістнадцяткове уявлення легко наводиться до двійкового (і назад). Тому якщо десь у програмуванні потрібно показати саме внутрішнє байтове уявлення числа, то дуже рідко вдаються до двійкового запису через 0 і 1. Занадто довго і не зрозуміло. Шістнадцятковий запис набагато читабельніший і компактніший.

— Згоден. Навіть мені сподобалося.

— До речі, Java можна прямо в коді записувати числа в різних системах числення:

Підстава Відмінна ознака Приклади Неправильні числа
2 0b на початку числа 0b00001111 0b1111121
8 0 на початку числа 01234343 0128
10 ні 95459 909a
16 0x на початку числа 0x10ff 0x1cgh

— Чудова лекція. Дякую, Білаабо.