Pretvorite binarne, oktalne i heksadecimalne brojeve i nizove jedan u drugi u Pythonu

Poslovanje

Python može obraditi brojeve i nizove kao binarne, oktalne i heksadecimalne brojeve kao i uobičajene decimalne brojeve. Također je lako pretvoriti između njih.

U ovom odjeljku će biti objašnjen sljedeći sadržaj zajedno s primjerom koda.

  • Zapišite cijele brojeve u binarnom, oktalnom i heksadecimalnom obliku.
  • Pretvorite brojeve u nizove u binarnom, oktalnom i heksadecimalnom zapisu.
    • ugrađena funkcija (npr. u programskom jeziku)bin(),oct(),hex()
    • metoda nizastr.format(), Ugrađene funkcijeformat(), f niz
    • Pretvorite negativni cijeli broj u niz u komplementarnom formatu dva.
  • Pretvorite nizove u binarnom, oktalnom i heksadecimalnom zapisu u brojeve.
    • ugrađena funkcija (npr. u programskom jeziku)int()
  • Primjeri primjene
    • Aritmetika binarnog niza
    • Pretvorba između binarnih, oktalnih i heksadecimalnih brojeva

Zapišite cijele brojeve u binarnom, oktalnom i heksadecimalnom obliku.

Dodavanjem sljedećih prefiksa, integer int brojevi mogu se napisati u binarnom, oktalnom i heksadecimalnom obliku.
Možete koristiti i velika slova.

  • binarni broj:0bili0B
  • Oktalni:0oili0O
  • Heksadecimalni broj:0xili0X

Izlaz print() bit će u decimalnom zapisu.

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

Čak i s prefiksom, tip je cijeli broj 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'>

Budući da je cjelobrojni tip, može se koristiti za redovite aritmetičke operacije.

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

Počevši od Pythona 3.6, moguće je ubaciti podvlake _ u brojeve. Ponavljanje donje crte _ rezultirat će pogreškom, ali možete umetnuti koliko god želite sve dok je ne ponavljate.

Podvlaka _ ne utječe na broj, pa se može koristiti kao razdjelnik kada ima mnogo znamenki. Na primjer, umetanje donje crte _ svake četiri znamenke lako je čitati.

print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True

bin_num = 0b1111_1111_1111
print(bin_num)
# 4095

Pretvorite brojeve u nizove u binarnom, oktalnom i heksadecimalnom zapisu.

Za pretvaranje broja u niz u binarnom, oktalnom ili heksadecimalnom zapisu koristite sljedeće ugrađene funkcije.

  • ugrađena funkcija (npr. u programskom jeziku)bin(),oct(),hex()
  • metoda nizastr.format(), Ugrađene funkcijeformat(), f niz

Ovaj odjeljak također objašnjava kako dobiti niz izražen u formatu komplementa dva za negativne vrijednosti.

Ugrađene funkcije bin(), oct(), hex()

Sljedeće ugrađene funkcije mogu pretvoriti brojeve u binarne, oktalne i heksadecimalne nizove.

  • binarni broj:bin()
  • Oktalni:oct()
  • Heksadecimalni broj:hex()

Svaki vraća niz sa sljedećim prefiksima

  • binarni broj:0b
  • Oktalni:0o
  • Heksadecimalni broj: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'>

Ako vam ne treba prefiks, upotrijebite slice[2:] da izdvojite niz iza njega ili upotrijebite format() kako je objašnjeno u nastavku.

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

Ako ga želite pretvoriti u decimalni niz, možete koristiti str().

print(str(i))
# 255

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

Ugrađena funkcija format(), string metoda str.format(), f string

Ugrađena funkcija format() i metode stringova str.format() i f-string također mogu pretvoriti brojeve u binarne, oktalne i heksadecimalne nizove.

Određivanjem drugog argumenta formata() kako slijedi, može se pretvoriti u binarne, oktalne i heksadecimalne nizove.

  • binarni broj:b
  • Oktalni:o
  • Heksadecimalni broj: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'>

Ako želite dobiti niz s prefiksom 0b,0o,0x, dodajte # nizu specifikacije oblikovanja.

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

Također je moguće ispuniti 0 bilo kojim brojem znamenki. Imajte na umu da se broj znakova za prefiks (dva znaka) također mora uzeti u obzir prilikom popunjavanja nule s prefiksom.

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

Metoda stringa str.format() također se može koristiti za konverziju.

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

Počevši od Pythona 3.6, također možete koristiti f string.f'xxx'

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

Pretvorite negativni cijeli broj u niz u komplementarnom formatu dva.

Kada se negativni cijeli broj pretvori u binarni ili heksadecimalni niz pomoću bin() ili format(), apsolutna vrijednost imat će predznak minus.

x = -9

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

U Pythonu se bitne operacije nad negativnim cijelim brojevima također izvode u komplementarnom prikazu dva. Stoga, ako želite dobiti niz izražen u obliku komplementa dva, možete uzeti logički OR& s maksimalnim potrebnim brojem bitova, kako slijedi.

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

Pretvorite nizove u binarnom, oktalnom i heksadecimalnom zapisu u brojeve.

Ugrađena funkcija int()

Za pretvaranje niza u binarnom, oktalnom ili heksadecimalnom zapisu u broj, koristite ugrađenu funkciju int().

Uz int(string, radix), string str u binarnom, oktalnom, heksadecimalnom zapisu, itd. može se pretvoriti u numerički int na temelju osnova. Ako se radix izostavi, broj se smatra decimalnim.

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

Ako je radix postavljen na 0, pretvorba se vrši na temelju sljedećeg prefiksa niza.

  • binarni prefiks:0bili0B
  • Oktalni prefiks:0oili0O
  • Heksadecimalni prefiks:0xili0X
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

Ako je osnovni broj 0 i nema prefiksa, on će se pretvoriti u decimalni broj, ali imajte na umu da ako je početak (lijeva strana) popunjen s 0, doći će do pogreške.

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

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

U drugim slučajevima, nizovi ispunjeni nulom mogu se konvertirati kao što jesu.

print(int('010'))
# 10

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

Ako se niz ne može pretvoriti s navedenim osnovama ili prefiksom, dolazi do pogreške.

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

Primjeri primjene

Aritmetika binarnog niza

Na primjer, za izvođenje operacije nad nizom u binarnom zapisu s prefiksom 0b.

Možete ga jednostavno pretvoriti u brojčanu vrijednost (integer type int), izvršiti operacije na njoj, a zatim je ponovno pretvoriti u string str.

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

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

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

Pretvorba između binarnih, oktalnih i heksadecimalnih brojeva

Također je lako pretvoriti binarne, oktalne i heksadecimalne nizove jedan u drugi. Jednom pretvoren u brojčani int, može se pretvoriti u niz bilo kojeg formata.

Ispunjavanje nule, dodavanje prefiksa itd. može se kontrolirati nizom specifikacije oblikovanja.

a_0b = '0b1110001010011'

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

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