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
Префикстің өзінде тип бүтін int болып табылады.
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'>
Кірістірілген функция пішімі(), жол әдісі str.format(), f жолы
Кірістірілген функция пішімі() және 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
Теріс бүтін санды екі толықтауыш пішіміндегі жолға түрлендіру.
Теріс бүтін сан бин() немесе format() көмегімен екілік немесе он алтылық жолға түрлендіргенде абсолютті мәннің минус таңбасы болады.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
Python тілінде теріс бүтін сандарға разрядтық амалдар екінің толықтауыш көрінісінде де орындалады. Сондықтан, екінің толықтауыш түрінде көрсетілген жолды алғыңыз келсе, биттік логикалық НЕМЕСЕ& келесідей талап етілетін бит цифрларының ең көп санымен.
- 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