— Привіт, Аміго!
— Привіт, Білаабо!
Хочу розповісти тобі трохи про різні системи числення.
Ти вже чув, що люди користуються десятковою системою числення. Ось головні факти цього підходу:
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 |
— Чудова лекція. Дякую, Білаабо.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ