Python можа апрацоўваць лікі і радкі як двайковыя, васьмярковыя і шаснаццатковыя лікі, а таксама звычайныя дзесятковыя лікі. Таксама лёгка канвертаваць паміж імі.
У гэтым раздзеле будзе растлумачана наступнае змест разам з прыкладам кода.
- Запішыце цэлыя лікі ў двайковым, васьмярковым і шаснаццатковым выглядзе.
- Пераўтварэнне лікаў у радкі ў двайковым, васьмярковым і шаснаццатковым выглядзе.
- убудаваная функцыя (напрыклад, на мове праграмавання)
bin()
,oct()
,hex()
- метад радка
str.format()
, Убудаваныя функцыіformat()
, f радок - Пераўтварыць адмоўнае цэлае лік у радок у фармаце дапаўнення да двух.
- убудаваная функцыя (напрыклад, на мове праграмавання)
- Пераўтварэнне радкоў у двайковым, васьмярковым і шаснаццатковым абазначэнні ў лікі.
- убудаваная функцыя (напрыклад, на мове праграмавання)
int()
- убудаваная функцыя (напрыклад, на мове праграмавання)
- Прыклады прымянення
- Арытмэтыка двайковых радкоў
- Пераўтварэнне паміж двайковымі, васьмярковымі і шаснаццатковымі лікамі
Запішыце цэлыя лікі ў двайковым, васьмярковым і шаснаццатковым выглядзе.
Дадаючы наступныя прэфіксы, цэлыя лічбы int можна запісаць у двайковым, васьмярковым і шаснаццатковым выглядзе адпаведна.
Вы таксама можаце выкарыстоўваць вялікія літары.
- Двайковы лік:
0b
або0B
- Васьмярковая:
0o
або0O
- Шаснаццатковы лік:
0x
або0X
Выхад print() будзе ў дзесятковым запісе.
bin_num = 0b10
oct_num = 0o10
hex_num = 0x10
print(bin_num)
print(oct_num)
print(hex_num)
# 2
# 8
# 16
Bin_num = 0B10
Oct_num = 0O10
Hex_num = 0X10
print(Bin_num)
print(Oct_num)
print(Hex_num)
# 2
# 8
# 16
Нават з прэфіксам тып уяўляе сабой цэлае цэлае.
print(type(bin_num))
print(type(oct_num))
print(type(hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>
print(type(Bin_num))
print(type(Oct_num))
print(type(Hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>
Паколькі гэта цэлы тып, яго можна выкарыстоўваць для звычайных арыфметычных аперацый.
result = 0b10 * 0o10 + 0x10
print(result)
# 32
Пачынаючы з Python 3.6, можна ўставіць знакі падкрэслення _ у лічбах. Паўтарэнне падкрэслівання _ прывядзе да памылкі, але вы можаце ўставіць столькі, колькі хочаце, пакуль не паўтараеце.
Падкрэсліванне _ не ўплывае на лік, таму яго можна выкарыстоўваць у якасці падзельніка, калі лічбаў шмат. Напрыклад, устаўка падкрэслення _ кожныя чатыры лічбы лёгка чытаецца.
print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True
bin_num = 0b1111_1111_1111
print(bin_num)
# 4095
Пераўтварэнне лікаў у радкі ў двайковым, васьмярковым і шаснаццатковым выглядзе.
Каб пераўтварыць лік у радок у двайковым, васьмярковым або шаснаццатковым выглядзе, выкарыстоўвайце наступныя ўбудаваныя функцыі.
- убудаваная функцыя (напрыклад, на мове праграмавання)
bin()
,oct()
,hex()
- метад радка
str.format()
, Убудаваныя функцыіformat()
, f радок
У гэтым раздзеле таксама тлумачыцца, як атрымаць радок, выражаны ў фармаце дапаўнення двойкі для адмоўных значэнняў.
Убудаваныя функцыі bin(), oct(), hex()
Наступныя ўбудаваныя функцыі могуць пераўтварыць лікі ў двайковыя, васьмярковыя і шаснаццатковыя радкі.
- Двайковы лік:
bin()
- Васьмярковая:
oct()
- Шаснаццатковы лік:
hex()
Кожны вяртае радок з наступнымі прэфіксамі
- Двайковы лік:
0b
- Васьмярковая:
0o
- Шаснаццатковы лік:
0x
- bin() — Built-in Functions — Python 3.10.0 Documentation
- oct() — Built-in Functions — Python 3.10.0 Documentation
- hex() — Built-in Functions — Python 3.10.0 Documentation
i = 255
print(bin(i))
print(oct(i))
print(hex(i))
# 0b11111111
# 0o377
# 0xff
print(type(bin(i)))
print(type(oct(i)))
print(type(hex(i)))
# <class 'str'>
# <class 'str'>
# <class 'str'>
Калі вам не патрэбны прэфікс, выкарыстоўвайце slice[2:], каб атрымаць радок за ім, або выкарыстоўвайце format(), як патлумачана далей.
print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff
Калі вы хочаце пераўтварыць яго ў дзесятковы радок, вы можаце выкарыстоўваць str().
print(str(i))
# 255
print(type(str(i)))
# <class 'str'>
Убудаваная функцыя format(), радковы метад str.format(), f string
Убудаваная функцыя format() і радковыя метады str.format() і f-string таксама могуць канвертаваць лікі ў двайковыя, васьмярковыя і шаснаццатковыя радкі.
Указаўшы другі аргумент format() наступным чынам, яго можна пераўтварыць у двайковы, васьмярковы і шаснаццатковы радкі адпаведна.
- Двайковы лік:
b
- Васьмярковая:
o
- Шаснаццатковы лік:
x
print(format(i, 'b'))
print(format(i, 'o'))
print(format(i, 'x'))
# 11111111
# 377
# ff
print(type(format(i, 'b')))
print(type(format(i, 'o')))
print(type(format(i, 'x')))
# <class 'str'>
# <class 'str'>
# <class 'str'>
Калі вы хочаце атрымаць радок з прэфіксам 0b,0o,0x, дадайце # да радка спецыфікацыі фарматавання.
print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff
Таксама можна запоўніць 0 любой колькасцю лічбаў. Звярніце ўвагу, што колькасць знакаў для прэфікса (два знака) таксама неабходна ўлічваць пры запаўненні нуля прэфіксам.
print(format(i, '08b'))
print(format(i, '08o'))
print(format(i, '08x'))
# 11111111
# 00000377
# 000000ff
print(format(i, '#010b'))
print(format(i, '#010o'))
print(format(i, '#010x'))
# 0b11111111
# 0o00000377
# 0x000000ff
Для пераўтварэння таксама можна выкарыстоўваць метад радка str.format().
print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff
Пачынаючы з Python 3.6, вы таксама можаце выкарыстоўваць радок f.f'xxx'
print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff
Пераўтварыць адмоўнае цэлае лік у радок у фармаце дапаўнення да двух.
Калі адмоўнае цэлае лік пераўтворыцца ў двайковы або шаснаццатковы радок з дапамогай bin() або format(), абсалютнае значэнне будзе мець знак мінус.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
У Python паразрадныя аперацыі над адмоўнымі цэлымі лікамі таксама выконваюцца ў прадстаўленні дапаўнення да двух. Такім чынам, калі вы хочаце атрымаць радок, выражаны ў форме дапаўнення два, вы можаце ўзяць паразраднае лагічнае OR& з максімальнай неабходнай колькасцю бітавых лічбаў, наступным чынам.
- 4bit:
0b1111(=0xf)
- 8bit:
0xff
- 16bit:
0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7
Пераўтварэнне радкоў у двайковым, васьмярковым і шаснаццатковым абазначэнні ў лікі.
Убудаваная функцыя int()
Каб пераўтварыць радок у двайковым, васьмярковым або шаснаццатковым выглядзе ў лік, выкарыстоўвайце ўбудаваную функцыю int().
З дапамогай int(string, radix) радок str ў двайковым, васьмярковым, шаснаццатковым запісах і г.д. можа быць пераўтвораны ў лікавы int на аснове прынцыпу. Калі радок апушчаны, лік лічыцца дзесятковым.
print(int('10'))
print(int('10', 2))
print(int('10', 8))
print(int('10', 16))
# 10
# 2
# 8
# 16
print(type(int('10')))
print(type(int('10', 2)))
print(type(int('10', 8)))
print(type(int('10', 16)))
# <class 'int'>
# <class 'int'>
# <class 'int'>
# <class 'int'>
Калі падстаўка ўстаноўлена ў 0, пераўтварэнне ажыццяўляецца на аснове наступнага прэфікса радка.
- Двайковы прэфікс:
0b
або0B
- Васьмярковы прэфікс:
0o
або0O
- Шаснаццатковы прэфікс:
0x
або0X
print(int('0b10', 0))
print(int('0o10', 0))
print(int('0x10', 0))
# 2
# 8
# 16
print(int('0B10', 0))
print(int('0O10', 0))
print(int('0X10', 0))
# 2
# 8
# 16
Калі базавы лік роўны 0 і няма прэфікса, ён будзе пераўтвораны ў дзесятковы лік, але звярніце ўвагу, што калі пачатак (левая частка) запоўнена 0, адбудзецца памылка.
print(int('10', 0))
# 10
# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'
У іншых выпадках радкі, запоўненыя нулям, можна пераўтварыць як ёсць.
print(int('010'))
# 10
print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255
Калі радок не можа быць пераўтвораны з указаным падставай або прэфіксам, узнікае памылка.
# print(int('ff', 2))
# ValueError: invalid literal for int() with base 2: 'ff'
# print(int('0a10', 0))
# ValueError: invalid literal for int() with base 0: '0a10'
# print(int('0bff', 0))
# ValueError: invalid literal for int() with base 0: '0bff'
Прыклады прымянення
Арытмэтыка двайковых радкоў
Напрыклад, каб выканаць аперацыю над радком у двайковым абазначэнні з прэфіксам 0b.
Вы можаце лёгка пераўтварыць яго ў лікавае значэнне (цэлы тып int), выканаць над ім аперацыі, а затым зноў пераўтварыць яго ў радок str.
a = '0b1001'
b = '0b0011'
c = int(a, 0) + int(b, 0)
print(c)
print(bin(c))
# 12
# 0b1100
Пераўтварэнне паміж двайковымі, васьмярковымі і шаснаццатковымі лікамі
Таксама лёгка пераўтварыць двайковыя, васьмярковыя і шаснаццатковыя радкі адзін у аднаго. Пасля пераўтварэння ў лікавы int ён можа быць пераўтвораны ў радок любога фармату.
Запаўненне нуля, прэфікс і г.д. можна кантраляваць радком спецыфікацыі фарматавання.
a_0b = '0b1110001010011'
print(format(int(a, 0), '#010x'))
# 0x00000009
print(format(int(a, 0), '#010o'))
# 0o00000011