Треки
/
Python
Python
/
Салабус
/
Двійкова, вісімкова та шістнадцяткова системи числення
Дв

Двійкова, вісімкова та шістнадцяткова системи числення у Python

{one: "1 вправа", few: "%{count} вправи", many: "%{count} вправ", other: "%{count} вправи"}

Про концепцію Двійкова, вісімкова та шістнадцяткова системи числення

Двійкова, вісімкова та шістнадцяткова системи (також відомі як hex) - це різні системи числення з різними основами. Двійкова має основу 2, вісімкова - основу 8, а шістнадцяткова - основу 16. Звичайні цілі числа в Python мають основу 10. Двійкова, вісімкова та шістнадцяткова системи - це все різні подання цілих чисел. Це означає, що вони представляють додатні й відʼємні числа (включно з нулем) без дробів чи десяткових частин і підтримують усі операції, які ми можемо виконувати з цілими числами.

Двійкова система

Двійкова система - це система числення з основою 2, яка використовує лише цифри 0 і 1. Вона зазвичай позначає стани 0 («вимкнено») та 1 («увімкнено») проходження струму через транзистори й перемикачі в компʼютерах, а також додатні та відʼємні заряди на магнітних носіях. Двійкова система може представити всі цілі числа, які використовуються в десятковій системі.

Фрагмент двійкової системи має такий вигляд, хоч насправді вона продовжується нескінченно і не зупиняється на 128:

128 64 32 16 8 4 2 1
2 ** 7 2 ** 6 2 ** 5 2 ** 4 2 ** 3 2 ** 2 2 ** 1 2 ** 0

Отже, якщо ми хочемо представити число 6 у двійковій системі, це буде 110.

Розряд 4 2 1
Двійкове число 1 1 0

А обчислення буде таким: 4 + 2 + 0 = 6

Ще один приклад: 19

Розряд 16 8 4 2 1
Двійкове число 1 0 0 1 1

Двійкове число буде: 10011 А обчислення буде таким: 16 + 0 + 0 + 2 + 1 = 19

Двійкова система в Python

У Python ми можемо записувати двійкові літерали за допомогою префікса 0b. Якщо ми напишемо 0b10011, Python сприйме це як двійкове число й переведе його в десяткову систему.

>>> 0b10011
19

>>> type(0b10011)
<class 'int'>

Двійковий запис у Python - це просто інший спосіб записати ціле число, тому двійкове подання є цілим числом для всіх математичних операцій.

Якщо ми напишемо число з префіксом 0b, яке не належить двійковій системі, це викличе SyntaxError.

Traceback (most recent call last):
  File "c:\binary.py", line 1, in <module>
    0b10211
SyntaxError: invalid digit '2' in binary literal

Операції з двійковими числами

Оскільки двійкові числа - це цілі числа, ми можемо виконувати над ними всі ті самі операції, що й з цілими числами.

# addition
>>> 0b10011 + 0b10011
38

# multiplication
>>> 0b10011 * 0b10011
361

Ми також можемо виконувати операції між двійковим і цілочисельним поданнями. Однак діють звичайні правила математичних операторів: ділення двох двійкових чи цілих чисел поверне float, навіть якщо результат ділення не має десяткової частини.

>>> 0b10011 + 19
38

>>> 0b10011/0b10011
1.0

>>> 0b10011/3
6.333333333333333

Перетворення у двійкове подання та з нього

Python автоматично перетворює двійковий літерал на int. Щоб перетворити int на двійкове подання, скористаймося вбудованою функцією [bin()][bin]. bin() поверне str з двійковим еквівалентом і префіксом 0b .

>>> bin(19)
'0b10011'

Щоб перетворити двійковий літерал на ціле число, ми можемо скористатися вбудованою функцією int() і передати рядок тексту (англ. string) з двійковим поданням та аргумент основи:

>>> int("0b10011", 2)
19

Якщо вказати неправильну основу (або некоректне двійкове подання), це викличе ValueError:

Traceback (most recent call last):
  File "c:\binary.py", line 4, in <module>
    int("0b10011", 3)
ValueError: invalid literal for int() with base 3: '0b10011'

Методи для двійкових чисел

Існують також спеціальні методи, які ми можемо застосовувати до двійкових чисел.

<int>.bit_length() поверне кількість бітів, потрібних для подання числа:

>>> 0b11011.bit_length()
5

<int>.bit_count() поверне кількість одиниць у двійковому числі. Наприклад, bit_count() для '0b11011' поверне 4:

>>> 0b11011.bit_count()
4
Note

Якщо ми працюємо локально, bit_count() потребує щонайменше Python 3.10. Онлайн-редактор Exercism наразі підтримує всі можливості до Python 3.11 включно.

Вісімкова система

Вісімкова система - це система числення з основою 8. Вона використовує цифри 0, 1, 2, 3, 4, 5, 6 і 7.

У Python ми можемо записувати вісімкові числа за допомогою префікса 0o. Як і з двійковою системою, Python автоматично перетворює вісімкове подання на int.

>>> 0o123
83

Як і двійкові, вісімкові числа є цілими числами й підтримують усі операції з цілими числами. Якщо додати префікс 0o до числа, яке не належить вісімковій системі, це викличе SyntaxError.

Перетворення у вісімкове подання та з нього

Щоб перетворити int на вісімкове подання, ми можемо скористатися вбудованою функцією [oct()][oct]. Вона працює подібно до функції bin() і повертає рядок тексту:

>>> oct(83)
'0o123'

Щоб перетворити вісімкове число на ціле, ми можемо скористатися функцією int(), передавши вісімкове подання у вигляді рядка тексту та основу (8) як аргументи:

>>> int("0o123", 8)
83

Як і у випадку з двійковою системою, неправильна основа викличе ValueError.

Шістнадцяткова система

Шістнадцяткова система - це система числення з основою 16. Вона використовує цифри 0 - 9 і літери A, B, C, D, E та F. A дорівнює 10, B - 11, C - 12, D - 13, E - 14, а F - 15.

У Python ми можемо записувати шістнадцяткові числа за допомогою префікса 0x. Як і з двійковою та вісімковою системами, Python автоматично перетворює шістнадцяткові літерали на int.

>>> 0x123
291

Як і з двійковою та вісімковою системами, шістнадцяткові літерали є цілими числами, і ми можемо виконувати з ними всі операції з цілими числами. Якщо додати префікс 0x до числа, яке не є шістнадцятковим, це викличе SyntaxError.

Перетворення у шістнадцяткове подання та з нього

Щоб перетворити int на шістнадцяткове подання, ми можемо скористатися вбудованою функцією [hex()][hex]. Вона працює подібно до функції bin() і повертає рядок тексту:

>>> hex(291)
'0x123'

Щоб перетворити шістнадцяткове подання на ціле число, ми можемо скористатися функцією int(), передавши шістнадцятковий рядок тексту та основу (16) як аргументи:

>>> int("0x123", 16)
291

Як і у випадку з двійковою та вісімковою системами, неправильна основа викличе ValueError.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці