Система числення – це певний спосіб подання чисел і відповідні йому правила дій над числами.
Мінімальний набір знаків, яким позначається число, називається алфавітом. Кількість знаків у алфавіті називається основою системи числення.
Назви систем числення походять від основ, які залежать від того, скільки знаків використовується в записі чисел. У двійковій це тільки 0 і 1, а в десяткового - від 0 до 9. В інших системах крім цифр можуть використовуватися літери, інші значки і навіть ієрогліфи, але практично всі вони вже давно застаріли.
В арабському способі запису числа значення, яке має кожна цифра в числі, залежить не тільки від того, яка це цифра, але й від позиції, яку вона займає в числі.
Система числення, в якій значення кожної цифри в довільному місці послідовності цифр, яка означає запис числа, не змінюється, називається непозиційною. Система числення, в якій значення кожної цифри залежить від місця в послідовності цифр у записі числа, називається позиційною.
Римський спосіб запису числа називається непозиційним, а арабський – позиційним.
Сутність позиційного подання числа відображується в розгорненій формі запису числа.
531= 500+30+1+0,20+0,6=5*102+3*101+1*100
Вищенаведений вираз називається розгорнутою формою запису числа. Доданки в цьому виразі є добутками значущих цифр числа і степенів основи системи числення, що залежить від позиції цифри в числі - розряду.
Тут 10 є основою системи числення, а показник степеня – це номер позиції цифри в записі числа (нумерація ведеться зліва на право, починаючи з нуля). Арифметичні операції у цій системі виконують за правилами, запропонованими ще в середньовіччі. Наприклад, додаючи два багатозначних числа, застосовуємо правило додавання стовпчиком. При цьому все зводиться до додавання однозначних чисел, для яких необхідним є знання таблиці додавання.
Переведення цілого числа з десяткової системи числення у будь-яку іншу здійснюється шляхом послідовного ділення числа на основу нової системи числення. Ділення виконується до тих пір, поки остання частка не стане менше дільника. Отримані остачі від ділення, взяті у зворотному порядку, будуть значеннями розрядів числа в новій системі числення. Остання частка дає старшу цифру числа.
Для переведення правильного дробу з десяткової системи числення у будь-яку іншу потрібно помножити заданий дріб на основу нової системи числення. Отримана ціла частина добутку буде першою цифрою після коми дробу в новій системі числення. Далі по черзі множаться дробові частини добутків на основу нової системи. Отримані цілі частини добутків будуть цифрами дробу у новій системі числення. Цей процес продовжують до тих пір, поки не буде знайдено число із заданою точністю.
Для переведення змішаного числа з десяткової системи числення в іншу необхідну окремо перевести цілу й дробову частини за вказаними правилами, а потім об'єднати результати у змішане число.
Для переведення чисел із будь-якої системи числення в десяткову необхідно це число представити у розгорнутій формі запису числа і виконати арифметичні дії в десятковій системі числення.
Приклад:
2178=2*1082+1*1081+7*1080=2*82+1*81+7*80=2*64+1*8+7*1=128+8+7=14310
110002=1*24+1*23+0*22+0*21+0*20=1*16+1*8+0*4+0*2+0*1=2410
Дано число у десятковій системі числення. Переведіть задане число з десяткової системи числення у двійкову
a=int(input()) # вводимо число
c=[] # створюємо порожній список для запису цифр числа у двійковій системі числення
while a!=0: # поки дане число ще можна ділити
b=a%2 # знаходимо остачу
c.append(b) # записуємо остачу в список
a=a//2 # знаходимо частку від ділення
c=c[::-1] # перепишемо у списку цифри числа у зворотньому порядку
print(*c,sep='') # виведемо елементи списку без квадратних дужок і без пробілів
Дано число у двійковій системі числення. Переведіть задане число з двійкової системи числення у десяткову
a=input() # зчитуємо число як рядок
n=0 # вводимо змінну для формування числа
for i in range (len(a)-1,-1,-1): # у циклі від довжини числа меншого на одиницю до 0 у зворотньому порядку
b=int(a[i])*2**i # множимо цифру на степінь двійки
n+=b # та додаємо
print(n) # виводимо шукане число
Виконайте завдання 1039 - 1043 з сайту обласного факультативу
http://dn.hoippo.km.ua:8889/problems/
А також тут:
Для переведення чисел з десяткової системи числення у двійкову, вісімкову та шістнадцяткову у Python існують функції hex(), oct(), bin().
Щоб перетворити числовий вигляд літералу в рядок використовуються такі функції:
hex(num) – перетворює число num в рядок, який зображує це число у шіснадцятковій системі числення;
oct(num) – перетворює число num в рядок, що представляє це число у вісімковій системі числення;
bin(num) – перетворює число num в рядок, що представляє це число у двійковій системі числення.
Щоб перетворити рядок в ціле число з врахуванням системи числення використовується функція
int(s, base)
де
s – рядок, який потрібно перетворити;
base – ціле число, що визначає кількість цифр у системі числення. Наприклад, для системи числення 7 значення base = 7.
Приклади функцій перетворення.
sh = hex(15) # sa = 0xF
so = oct(15) # sb = 0o17
sb = bin(15) # sb = 0b1111
i = int('15',10) # i = 15
i = int('15',8) # i = 13
# i = int('19',8) - помилка, цифра 9 не може бути у 8-й системі числення
i = int('2EF',16) # i = 751
i = int('20',16) # i = 32
i = int('14',5) # i = 9
Бітова операція в програмуванні — це операція, яка виконується над окремими бітами числа. Вони часто використовуються для низькорівневих маніпуляцій з даними, оптимізації коду та роботи з апаратним забезпеченням. Основні типи бітових операцій включають:
Побітове І (AND): Виконує логічне І над кожною парою відповідних бітів двох чисел.
Побітове АБО (OR): Виконує логічне АБО над кожною парою відповідних бітів двох чисел.
Побітове виключне АБО (XOR): Виконує логічне виключне АБО над кожною парою відповідних бітів двох чисел.
Побітове НЕ (NOT): Інвертує кожен біт числа.
Зсув вліво (<<): Зсуває біти числа вліво на вказану кількість позицій.
Зсув вправо (>>): Зсуває біти числа вправо на вказану кількість позицій
Побітові операції мають сенс лише для цілих чисел. Результат порозрядних операцій обчислюється так, ніби виконується в доповненні до двох із нескінченною кількістю знакових бітів.
Пріоритети двійкових порозрядних операцій нижчі, ніж числових операцій, і вищі, ніж порівняння; унарна операція ~ має той самий пріоритет, що й інші унарні числові операції (+ і -).
У цій таблиці наведено порозрядні операції, відсортовані за зростанням пріоритету:
Операція Як працює Результат Примітки Приклад
x | y
порозрядно or x і y
(4)
Повертає 1, якщо хоча б один з бітів є 1.
a = 12 # 0b1100
b = 5 # 0b0101
c = a | b # 0b1101 (13 в десятковій системі)
x ^ y
порозрядно exclusive or x та y
(4)
Повертає 1, якщо біти різні.
a = 12 # 0b1100
b = 5 # 0b0101
c = a ^ b # 0b1001 (9 в десятковій системі)
x & y
порозрядно and x і y
(4)
Повертає 1, якщо обидва біти є 1.
a = 12 # 0b1100
b = 5 # 0b0101
c = a & b # 0b0100 (4 в десятковій системі)
x << n
x зміщено вліво на n бітів
(1)(2)
Зсуває біти числа вліво на задану кількість позицій.
a = 5 # 0b0101
b = a << 2 # 0b10100 (20 в десятковій системі)
x >> n
x зміщено праворуч на n бітів
(1)(3)
Зсуває біти числа вправо на задану кількість позицій.
a = 20 # 0b10100
b = a >> 2 # 0b0101 (5 в десятковій системі)
~x
біти x інвертовані
Змінює кожен біт числа на протилежний.
a = 9 # 0b1001
b = ~a # -10 (0b1010 в двійковій системі)
Примітки:
Підрахунок від’ємного зсуву є незаконним і викликає ValueError.
Зсув вліво на n бітів еквівалентний множенню на pow(2, n).
Зсув праворуч на n бітів еквівалентний діленню за допомогою pow(2, n).
Виконання цих обчислень із принаймні одним додатковим бітом розширення знака в поданні скінченних двох доповнень (робоча бітова ширина 1 + max(x.bit_length(), y.bit_length()) або більше) є достатньою для того, щоб отримати той самий результат, ніби існує нескінченна кількість знакових бітів.