Ngonversi nomer lan string biner, octal, lan heksadesimal menyang lan saka siji liyane ing Python

Bisnis

Python bisa nangani nomer lan senar minangka nomer biner, octal, lan heksadesimal uga nomer desimal biasanipun. Iku uga gampang kanggo ngowahi antarane wong-wong mau.

Ing bagean iki, isi ing ngisor iki bakal diterangake bebarengan karo kode conto.

  • Nulis integer ing biner, octal, lan heksadesimal.
  • Ngonversi angka dadi string ing notasi biner, octal, lan heksadesimal.
    • fungsi built-in (contone ing basa pemrograman)bin(),oct(),hex()
    • metode stringstr.format(), Fungsi Dibangunformat(),f senar
    • Ngonversi integer negatif menyang string ing format pelengkap loro.
  • Ngonversi string ing notasi biner, octal, lan heksadesimal dadi angka.
    • fungsi built-in (contone ing basa pemrograman)int()
  • Tuladha Aplikasi
    • Aritmatika string biner
    • Ngonversi antarane nomer biner, octal, lan heksadesimal

Nulis integer ing biner, octal, lan heksadesimal.

Kanthi nambahake ater-ater ing ngisor iki, angka integer bisa ditulis ing binar, oktal, lan heksadesimal.
Sampeyan uga bisa nggunakake huruf kapital.

  • Angka binar:0butawa0B
  • Oktal:0outawa0O
  • Nomer heksadesimal:0xutawa0X

Output print () bakal ana ing notasi desimal.

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

Malah kanthi awalan, jinis kasebut minangka integer integer.

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'>

Amarga iku jinis integer, bisa digunakake kanggo operasi aritmetika biasa.

result = 0b10 * 0o10 + 0x10
print(result)
# 32

Miwiti karo Python 3.6, iku bisa kanggo masang underscores _ ing nomer. Mbaleni garis garis _ bakal nyebabake kesalahan, nanging sampeyan bisa nglebokake akeh sing dikarepake anggere sampeyan ora mbaleni.

Ing _ underscore ora mengaruhi nomer, supaya bisa digunakake minangka separator nalika ana akeh digit. Contone, nglebokake garis ngisor _ saben patang digit gampang diwaca.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Ngonversi angka dadi string ing notasi biner, octal, lan heksadesimal.

Kanggo ngowahi nomer dadi string ing notasi biner, octal, utawa heksadesimal, gunakake fungsi sing ana ing ngisor iki.

  • fungsi built-in (contone ing basa pemrograman)bin(),oct(),hex()
  • metode stringstr.format(), Fungsi Dibangunformat(),f senar

Bagean iki uga nerangake carane njaluk senar ditulis ing format nglengkapi loro kanggo nilai negatif.

Fungsi built-in bin(), oct(), hex()

Fungsi sing dibangun ing ngisor iki bisa ngowahi angka dadi string biner, octal, lan heksadesimal.

  • Angka binar:bin()
  • Oktal:oct()
  • Nomer heksadesimal:hex()

Saben ngasilake senar kanthi prefiks ing ngisor iki

  • Angka binar:0b
  • Oktal:0o
  • Nomer heksadesimal: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'>

Yen sampeyan ora mbutuhake awalan, gunakake irisan [2:] kanggo ngekstrak senar ing mburi, utawa gunakake format () kaya sing diterangake sabanjure.

print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff

Yen sampeyan pengin ngowahi dadi string desimal, sampeyan bisa nggunakake str ().

print(str(i))
# 255

print(type(str(i)))
# <class 'str'>

Dibangun ing format fungsi (), string method str.format(), f string

Dibangun ing format fungsi () lan cara senar str.format () lan f-string uga bisa ngowahi nomer kanggo binar, octal, lan senar heksadesimal.

Kanthi nemtokake argumen format kapindho () kaya ing ngisor iki, bisa diowahi dadi string biner, octal, lan heksadesimal.

  • Angka binar:b
  • Oktal:o
  • Nomer heksadesimal: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'>

Yen sampeyan pengin entuk string kanthi awalan 0b,0o,0x, tambahake # menyang string spesifikasi format.

print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff

Sampeyan uga bisa ngisi 0 kanthi nomer digit apa wae. Elinga yen jumlah karakter kanggo awalan (loro karakter) uga kudu dijupuk menyang akun nalika ngisi nol karo ater-ater.

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

Cara senar str.format () bisa digunakake kanggo konversi uga.

print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff

Miwiti karo Python 3.6, sampeyan uga bisa nggunakake senar f.f'xxx'

print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff

Ngonversi integer negatif menyang string ing format pelengkap loro.

Nalika integer negatif diowahi dadi senar binar utawa heksadesimal nggunakake bin () utawa format (), Nilai Absolute bakal duwe tandha minus.

x = -9

print(x)
print(bin(x))
# -9
# -0b1001

Ing Python, operasi bitwise ing integer negatif uga dileksanakake ing perwakilan nglengkapi loro. Mulane, yen sampeyan pengin njaluk senar ditulis ing wangun nglengkapi loro, sampeyan bisa njupuk bitwise logis UTAWA & amp; kanthi jumlah maksimum bit digit dibutuhake, minangka nderek.

  • 4bit:0b1111(=0xf)
  • 8bit:0xff
  • 16bit:0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7

Ngonversi string ing notasi biner, octal, lan heksadesimal dadi angka.

Fungsi internal int()

Kanggo ngowahi string ing notasi binar, octal, utawa heksadesimal dadi angka, gunakake fungsi int ().

Kanthi int(string, radix), string str ing biner, octal, notasi heksadesimal, lan sapiturute bisa diowahi dadi int numerik adhedhasar radix. Yen radix diilangi, angka kasebut dianggep dadi desimal.

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'>

Yen radix disetel dadi 0, konversi wis rampung adhedhasar ater-ater senar ing ngisor iki.

  • Ater-ater biner:0butawa0B
  • Ater-ater oktal:0outawa0O
  • Ater-ater heksadesimal:0xutawa0X
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

Yen nomer dhasar 0 lan ora ana ater-ater, bakal diowahi dadi nomer desimal, nanging elinga yen wiwitan (sisih kiwa) diisi 0, kesalahan bakal kedadeyan.

print(int('10', 0))
# 10

# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'

Ing kasus liyane, strings nul-kapenuhan bisa diowahi minangka.

print(int('010'))
# 10

print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255

Yen string ora bisa diowahi nganggo radix utawa prefiks sing ditemtokake, ana kesalahan.

# 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'

Tuladha Aplikasi

Aritmatika string biner

Contone, kanggo nindakake operasi ing string ing notasi binar kanthi awalan 0b.

Sampeyan bisa gampang Ngonversi menyang Nilai numerik (jinis integer int), nindakake operasi ing, lan banjur ngowahi maneh menyang string str maneh.

a = '0b1001'
b = '0b0011'

c = int(a, 0) + int(b, 0)

print(c)
print(bin(c))
# 12
# 0b1100

Ngonversi antarane nomer biner, octal, lan heksadesimal

Iku uga gampang kanggo ngowahi strings biner, octal, lan heksadesimal kanggo saben liyane. Sawise diowahi dadi int numerik, bisa diowahi dadi senar saka format apa wae.

Zero-filling, prefixing, etc. bisa dikontrol dening string spesifikasi format.

a_0b = '0b1110001010011'

print(format(int(a, 0), '#010x'))
# 0x00000009

print(format(int(a, 0), '#010o'))
# 0o00000011
Copied title and URL