A Python a számokat és a karakterláncokat a szokásos decimális számok mellett bináris, oktális és hexadecimális számokként is tudja kezelni. A kettő közötti konverzió is könnyen elvégezhető.
Ebben a szakaszban a következő tartalmakat ismertetjük a mintakóddal együtt.
- Egész számok írása bináris, oktális és hexadecimális formában.
- Számok átalakítása karakterláncokká bináris, oktális és hexadecimális jelölésekben.
- beépített függvény (pl. programozási nyelvben)
bin()
,oct()
,hex()
- string módszer
str.format()
, Beépített funkciókformat()
, f string - Egy negatív egész szám átalakítása karakterlánccá kettes komplement formátumban.
- beépített függvény (pl. programozási nyelvben)
- A bináris, oktális és hexadecimális jelölésű karakterláncok számokká alakítása.
- beépített függvény (pl. programozási nyelvben)
int()
- beépített függvény (pl. programozási nyelvben)
- Alkalmazási példák
- Bináris karakterlánc-aritmetika
- Átváltás bináris, oktális és hexadecimális számok között
Egész számok írása bináris, oktális és hexadecimális formában.
A következő előtagok hozzáadásával az integer int számok bináris, oktális és hexadecimális formában írhatók.
Használhat nagybetűket is.
- Bináris szám:
0b
vagy0B
- Octal:
0o
vagy0O
- Hexadecimális szám:
0x
vagy0X
A print() kimenete tizedesjegyekben lesz megadva.
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
A típus még az előtaggal együtt is integer 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'>
Mivel egész szám típusról van szó, rendszeres aritmetikai műveletekre használható.
result = 0b10 * 0o10 + 0x10
print(result)
# 32
A Python 3.6-tól kezdődően a számok közé _ aláhúzás is beilleszthető. Az _ aláhúzás megismétlése hibát eredményez, de annyi aláhúzást illeszthetsz be, amennyit csak akarsz, amíg nem ismétled meg.
Az _ aláhúzás nem befolyásolja a számot, így sok számjegy esetén elválasztóként használható. Például négy számjegyenként egy _ aláhúzás beillesztése könnyen olvasható.
print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True
bin_num = 0b1111_1111_1111
print(bin_num)
# 4095
Számok átalakítása karakterláncokká bináris, oktális és hexadecimális jelölésekben.
Ha egy számot bináris, oktális vagy hexadecimális jelölésű karakterlánccá szeretne alakítani, használja a következő beépített függvényeket.
- beépített függvény (pl. programozási nyelvben)
bin()
,oct()
,hex()
- string módszer
str.format()
, Beépített funkciókformat()
, f string
Ez a szakasz azt is elmagyarázza, hogyan kaphatunk egy stringet kettes komplement formátumban kifejezve negatív értékek esetén.
Beépített bin(), oct(), hex() függvények
A következő beépített függvények a számokat bináris, oktális és hexadecimális karakterláncokká alakíthatják.
- Bináris szám:
bin()
- Octal:
oct()
- Hexadecimális szám:
hex()
Mindegyik a következő előtagokkal rendelkező karakterláncot adja vissza
- Bináris szám:
0b
- Octal:
0o
- Hexadecimális szám:
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'>
Ha nincs szükséged az előtagra, használd a slice[2:] parancsot a mögötte lévő karakterlánc kivonásához, vagy használd a format() parancsot a következőkben leírtak szerint.
print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff
Ha decimális karakterlánccá akarod konvertálni, használhatod a str() függvényt.
print(str(i))
# 255
print(type(str(i)))
# <class 'str'>
Beépített függvény format(), string módszer str.format(), f string
A beépített format() függvény, valamint az str.format() és az f-string karakterlánc-módszerek a számokat bináris, oktális és hexadecimális karakterláncokká is átalakíthatják.
A format() második argumentumát az alábbiak szerint megadva bináris, oktális és hexadecimális karakterláncokká alakíthatjuk.
- Bináris szám:
b
- Octal:
o
- Hexadecimális szám:
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'>
Ha 0b,0o,0x előtaggal rendelkező karakterláncot szeretne kapni, adjon hozzá #-t a formázási specifikációs karakterlánchoz.
print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff
A 0-t tetszőleges számjegyekkel is ki lehet tölteni. Vegye figyelembe, hogy az előtag karaktereinek számát (két karakter) is figyelembe kell venni, amikor a nullát előtaggal tölti ki.
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
A string módszer str.format() is használható a konvertálásra.
print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff
A Python 3.6-tól kezdve az f karakterlánc is használható.f'xxx'
print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff
Egy negatív egész szám átalakítása karakterlánccá kettes komplement formátumban.
Amikor egy negatív egész számot bin() vagy format() segítségével bináris vagy hexadecimális karakterlánccá alakítunk, az abszolút érték mínusz előjelet kap.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
A Pythonban a negatív egész számokkal végzett bitenkénti műveletek szintén a kettes komplement ábrázolásban történnek. Ezért ha egy karakterláncot akarunk megkapni kettes komplement formában kifejezve, akkor a bitenkénti logikai VAGY&-ot a maximálisan szükséges számú bitjegyekkel a következőképpen végezhetjük el.
- 4bit:
0b1111(=0xf)
- 8bit:
0xff
- 16bit:
0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7
A bináris, oktális és hexadecimális jelölésű karakterláncok számokká alakítása.
Beépített int() függvény
Egy bináris, oktális vagy hexadecimális jelölésű karakterlánc számmá alakításához használja az int() beépített függvényt.
Az int(string, radix) segítségével egy string str bináris, oktális, hexadecimális, stb. jelölésű karakterláncot a radix alapján numerikus int értékké alakíthatunk. Ha a radixot elhagyjuk, a számot decimálisnak tekintjük.
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'>
Ha a radix 0-ra van állítva, a konverzió a következő karakterlánc-előtag alapján történik.
- Bináris előtag:
0b
vagy0B
- Oktális előtag:
0o
vagy0O
- Hexadecimális előtag:
0x
vagy0X
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
Ha az alapszám 0, és nincs előtag, akkor a szám decimális számként lesz átalakítva, de vegye figyelembe, hogy ha az elején (bal oldalon) 0 van, akkor hiba lép fel.
print(int('10', 0))
# 10
# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'
Más esetekben a nullával kitöltött karakterláncok változatlanul konvertálhatók.
print(int('010'))
# 10
print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255
Ha a karakterlánc nem konvertálható a megadott radixszal vagy előtaggal, hiba lép fel.
# 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'
Alkalmazási példák
Bináris karakterlánc-aritmetika
Például egy művelet elvégzése a 0b előtaggal rendelkező, bináris jelölésű karakterláncon.
Könnyen átalakíthatod numerikus értékké (int típusú egész szám), műveleteket végezhetsz rajta, majd visszaalakíthatod str karakterlánccá.
a = '0b1001'
b = '0b0011'
c = int(a, 0) + int(b, 0)
print(c)
print(bin(c))
# 12
# 0b1100
Átváltás bináris, oktális és hexadecimális számok között
A bináris, oktális és hexadecimális karakterláncok egymáshoz való átalakítása is egyszerű. Ha egyszer numerikus int-be konvertáltuk, az bármilyen formátumú karakterlánccá konvertálható.
A nullfeltöltés, előtagozás stb. a formázási specifikációs karakterlánccal szabályozható.
a_0b = '0b1110001010011'
print(format(int(a, 0), '#010x'))
# 0x00000009
print(format(int(a, 0), '#010o'))
# 0o00000011