Python тілінде екілік, сегіздік және он алтылық сандар мен жолдарды бір-біріне және бір-біріне түрлендіру

Іскерлік

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
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
Copied title and URL