Python lahko obdeluje števila in nize kot binarna, osmiška in šestnajstiška števila ter običajna decimalna števila. Prav tako jih je mogoče enostavno pretvoriti med njimi.
V tem razdelku bodo razložene naslednje vsebine skupaj z vzorčno kodo.
- Zapišite cela števila v dvojiškem, osmeriškem in šestnajstiškem sistemu.
- Pretvarjanje števil v nize v binarnem, oktalnem in šestnajstiškem zapisu.
- vgrajena funkcija (npr. v programskem jeziku)
bin()
,oct()
,hex()
- metoda nizov
str.format()
, vgrajene funkcijeformat()
, f niz - Pretvarjanje negativnega celega števila v niz v dvokomponentni obliki.
- vgrajena funkcija (npr. v programskem jeziku)
- Pretvarjanje nizov v dvojiškem, osmeriškem in šestnajstiškem zapisu v števila.
- vgrajena funkcija (npr. v programskem jeziku)
int()
- vgrajena funkcija (npr. v programskem jeziku)
- Primeri uporabe
- Aritmetika binarnih nizov
- Pretvarjanje med dvojiškimi, osmeriškimi in šestnajstiškimi števili
Zapišite cela števila v dvojiškem, osmeriškem in šestnajstiškem sistemu.
Z dodajanjem naslednjih predpon lahko celoštevilska števila int zapišemo v dvojiški, osmiški in šestnajstiški obliki.
Uporabite lahko tudi velike tiskane črke.
- Binarno število:
0b
ali0B
- Oktalno:
0o
ali0O
- Šestnajstiško število:
0x
ali0X
Izpis funkcije print() bo v decimalnem 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
Tudi s predpono je tip celoštevilski 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'>
Ker gre za celoštevilski tip, se lahko uporablja za običajne aritmetične operacije.
result = 0b10 * 0o10 + 0x10
print(result)
# 32
Od različice Python 3.6 je mogoče v številke vstaviti podčrtaj _. Ponavljanje podčrtanke _ bo povzročilo napako, vendar jih lahko vstavite, kolikor želite, dokler jih ne ponovite.
Podčrtaj _ ne vpliva na število, zato ga lahko uporabite kot ločilo, kadar je številk veliko. Če na primer vstavite podčrtanko _ na vsake štiri številke, je to enostavno za branje.
print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True
bin_num = 0b1111_1111_1111
print(bin_num)
# 4095
Pretvarjanje števil v nize v binarnem, oktalnem in šestnajstiškem zapisu.
Za pretvorbo števila v niz v binarnem, oktalnem ali šestnajstiškem zapisu uporabite naslednje vgrajene funkcije.
- vgrajena funkcija (npr. v programskem jeziku)
bin()
,oct()
,hex()
- metoda nizov
str.format()
, vgrajene funkcijeformat()
, f niz
V tem razdelku je razloženo tudi, kako dobiti niz, izražen v dvokomponentni obliki za negativne vrednosti.
Vgrajene funkcije bin(), oct(), hex()
Naslednje vgrajene funkcije lahko pretvorijo števila v binarne, oktalne in heksadecimalne nize.
- Binarno število:
bin()
- Oktalno:
oct()
- Šestnajstiško število:
hex()
Vsak od njih vrne niz z naslednjimi predponami
- Binarno število:
0b
- Oktalno:
0o
- Šestnajstiško število:
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'>
Če predpone ne potrebujete, uporabite slice[2:], da izluščite niz za njo, ali pa uporabite format(), kot je razloženo v nadaljevanju.
print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff
Če ga želite pretvoriti v decimalni niz, lahko uporabite funkcijo str().
print(str(i))
# 255
print(type(str(i)))
# <class 'str'>
Vgrajena funkcija format(), string metoda str.format(), f string
Vgrajena funkcija format() ter metodi str.format() in f-string lahko številke pretvorijo tudi v binarne, oktalne in heksadecimalne nize.
Drugi argument funkcije format() lahko pretvorite v binarne, oktalne in heksadecimalne nize, če ga določite na naslednji način.
- Binarno število:
b
- Oktalno:
o
- Šestnajstiško število:
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'>
Če želite dobiti niz s predpono 0b,0o,0x, dodajte # v niz za specifikacijo oblikovanja.
print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff
Prav tako je mogoče 0 izpolniti s poljubnim številom številk. Upoštevajte, da je treba pri izpolnjevanju ničle s predpono upoštevati tudi število znakov za predpono (dva znaka).
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
Za pretvorbo lahko uporabite tudi metodo str.format().
print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff
Od različice Python 3.6 naprej lahko uporabite tudi niz f.f'xxx'
print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff
Pretvarjanje negativnega celega števila v niz v dvokomponentni obliki.
Ko negativno celo število pretvorite v binarni ali šestnajstiški niz z uporabo funkcij bin() ali format(), bo absolutna vrednost imela znak minus.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
V Pythonu se bitne operacije z negativnimi celimi števili prav tako izvajajo v predstavitvi z dvema dopolnitvama. Če torej želite dobiti niz, izražen v obliki dvojnega dopolnila, lahko izvedete bitno logično operacijo OR& z največjim potrebnim številom bitnih številk, kot sledi.
- 4bit:
0b1111(=0xf)
- 8bit:
0xff
- 16bit:
0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7
Pretvarjanje nizov v dvojiškem, osmeriškem in šestnajstiškem zapisu v števila.
Vgrajena funkcija int()
Za pretvorbo niza v dvojiškem, osmeriškem ali šestnajstiškem zapisu v število uporabite vgrajeno funkcijo int().
S funkcijo int(string, radix) lahko niz string str v binarnem, osmiškem, šestnajstiškem zapisu itd. pretvorite v številski int na podlagi radixa. Če je radix izpuščen, se šteje, da je število decimalno.
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'>
Če je radix nastavljen na 0, se pretvorba izvede na podlagi naslednje predpone niza.
- Binarna predpona:
0b
ali0B
- Oktalna predpona:
0o
ali0O
- Šestnajstiška predpona:
0x
ali0X
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
Če je osnovno število 0 in ni predpone, se pretvori kot decimalno število, vendar upoštevajte, da bo prišlo do napake, če je začetek (leva stran) zapolnjen z 0.
print(int('10', 0))
# 10
# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'
V drugih primerih se lahko ničelno izpolnjeni nizi pretvorijo tako, kot so.
print(int('010'))
# 10
print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255
Če niza ni mogoče pretvoriti z navedenim radixom ali predpono, se pojavi napaka.
# 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'
Primeri uporabe
Aritmetika binarnih nizov
Če želite na primer izvesti operacijo z nizom v binarnem zapisu s predpono 0b.
Enostavno ga lahko pretvorite v številsko vrednost (celoštevilsko vrsto int), z njim opravite operacije in ga nato spet pretvorite nazaj v niz string str.
a = '0b1001'
b = '0b0011'
c = int(a, 0) + int(b, 0)
print(c)
print(bin(c))
# 12
# 0b1100
Pretvarjanje med dvojiškimi, osmeriškimi in šestnajstiškimi števili
Enostavno je tudi pretvarjanje binarnih, oktalnih in heksadecimalnih nizov med seboj. Ko je enkrat pretvorjen v številski int, ga je mogoče pretvoriti v niz poljubne oblike.
Izpolnjevanje ničel, predpon itd. je mogoče nadzorovati z nizom za specifikacijo oblikovanja.
a_0b = '0b1110001010011'
print(format(int(a, 0), '#010x'))
# 0x00000009
print(format(int(a, 0), '#010o'))
# 0o00000011