Python kan getallen en tekenreeksen verwerken als binaire, octale en hexadecimale getallen, naast de gebruikelijke decimale getallen. Het is ook gemakkelijk om tussen deze getallen te converteren.
In deze sectie wordt de volgende inhoud uitgelegd, samen met voorbeeldcode.
- Schrijf gehele getallen in binair, octaal en hexadecimaal.
- Converteer getallen naar strings in binaire, octale en hexadecimale notatie.
- ingebouwde functie (bv. in een programmeertaal)
bin()
,oct()
,hex()
- tekenreeksmethode
str.format()
, Ingebouwde Functiesformat()
, f string - Converteer een negatief geheel getal naar een string in two's complement formaat.
- ingebouwde functie (bv. in een programmeertaal)
- Converteer strings in binaire, octale en hexadecimale notatie naar getallen.
- ingebouwde functie (bv. in een programmeertaal)
int()
- ingebouwde functie (bv. in een programmeertaal)
- Toepassingsvoorbeelden
- Binaire string rekenkunde
- Omrekenen tussen binaire, octale en hexadecimale getallen
Schrijf gehele getallen in binair, octaal en hexadecimaal.
Door de volgende voorvoegsels toe te voegen, kunnen gehele getallen worden geschreven in respectievelijk binair, octaal en hexadecimaal.
U kunt ook hoofdletters gebruiken.
- Binair nummer:
0b
of0B
- Octal:
0o
of0O
- Hexadecimaal getal:
0x
of0X
De uitvoer van print() zal in decimale notatie zijn.
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
Zelfs met het voorvoegsel, is het type een geheel getal 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'>
Aangezien het een integer type is, kan het worden gebruikt voor gewone rekenkundige bewerkingen.
result = 0b10 * 0o10 + 0x10
print(result)
# 32
Vanaf Python 3.6 is het mogelijk om underscores _ in te voegen in getallen. Het herhalen van een underscore _ zal resulteren in een fout, maar je kunt er zoveel invoegen als je wilt zolang je het maar niet herhaalt.
Het onderstrepingsteken _ heeft geen invloed op het getal, dus kan het als scheidingsteken worden gebruikt als er veel cijfers zijn. Bijvoorbeeld, het invoegen van een underscore _ om de vier cijfers is gemakkelijk te lezen.
print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True
bin_num = 0b1111_1111_1111
print(bin_num)
# 4095
Converteer getallen naar strings in binaire, octale en hexadecimale notatie.
Om een getal om te zetten in een tekenreeks in binaire, octale of hexadecimale notatie, kunt u de volgende ingebouwde functies gebruiken.
- ingebouwde functie (bv. in een programmeertaal)
bin()
,oct()
,hex()
- tekenreeksmethode
str.format()
, Ingebouwde Functiesformat()
, f string
Dit gedeelte legt ook uit hoe je een string krijgt uitgedrukt in two's complement formaat voor negatieve waarden.
Ingebouwde functies bin(), oct(), hex()
De volgende ingebouwde functies kunnen getallen omzetten in binaire, octale en hexadecimale strings.
- Binair nummer:
bin()
- Octal:
oct()
- Hexadecimaal getal:
hex()
Elk geeft een string terug met de volgende voorvoegsels
- Binair nummer:
0b
- Octal:
0o
- Hexadecimaal getal:
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'>
Als je het voorvoegsel niet nodig hebt, gebruik dan slice[2:] om de string erachter te extraheren, of gebruik format() zoals hierna wordt uitgelegd.
print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff
Als je het wilt omzetten naar een decimale string, kun je str() gebruiken.
print(str(i))
# 255
print(type(str(i)))
# <class 'str'>
Ingebouwde functie format(), string methode str.format(), f string
De ingebouwde functie format() en de string methodes str.format() en f-string kunnen ook getallen omzetten naar binaire, octale en hexadecimale strings.
Door het tweede argument van format() als volgt te specificeren, kan het worden geconverteerd naar binaire, octale en hexadecimale strings, respectievelijk.
- Binair nummer:
b
- Octal:
o
- Hexadecimaal getal:
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'>
Als je een string wilt krijgen met prefix 0b,0o,0x, voeg dan # toe aan de formatting specificatie string.
print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff
Het is ook mogelijk om 0 in te vullen met een willekeurig aantal cijfers. Merk op dat bij het invullen van een nul met een voorvoegsel ook rekening moet worden gehouden met het aantal tekens voor het voorvoegsel (twee tekens).
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
De string methode str.format() kan ook gebruikt worden voor conversie.
print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff
Vanaf Python 3.6 kunt u ook de string f gebruiken.f'xxx'
print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff
Converteer een negatief geheel getal naar een string in two's complement formaat.
Wanneer een negatief geheel getal geconverteerd wordt naar een binaire of hexadecimale string met bin() of format(), zal de absolute waarde een minteken hebben.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
In Python worden bitwise operaties op negatieve gehele getallen ook uitgevoerd in two's complement representatie. Als je dus een tekenreeks uitgedrukt in two's complement vorm wil bekomen, kan je een bitwise logische OR& nemen met het maximum aantal bitcijfers dat nodig is, als volgt.
- 4bit:
0b1111(=0xf)
- 8bit:
0xff
- 16bit:
0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7
Converteer strings in binaire, octale en hexadecimale notatie naar getallen.
Ingebouwde functie int()
Om een string in binaire, octale of hexadecimale notatie om te zetten in een getal, gebruik je de ingebouwde functie int().
Met int(string, radix) kan een string str in binaire, octale, hexadecimale notatie, enz. worden geconverteerd naar een numerieke int op basis van de radix. Indien de radix wordt weggelaten, wordt het getal als decimaal beschouwd.
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'>
Als de radix op 0 is ingesteld, vindt de conversie plaats op basis van het volgende string-voorvoegsel.
- Binair voorvoegsel:
0b
of0B
- Octaal voorvoegsel:
0o
of0O
- Hexadecimaal voorvoegsel:
0x
of0X
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
Als het grondtal 0 is en er geen voorvoegsel is, zal het worden omgezet als een decimaal getal, maar merk op dat als het begin (linkerzijde) is gevuld met 0, er een fout zal optreden.
print(int('10', 0))
# 10
# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'
In andere gevallen kunnen met nullen gevulde strings worden geconverteerd zoals ze zijn.
print(int('010'))
# 10
print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255
Als de string niet kan worden geconverteerd met de opgegeven radix of prefix, treedt een fout op.
# 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'
Toepassingsvoorbeelden
Binaire string rekenkunde
Bijvoorbeeld, om een bewerking uit te voeren op een string in binaire notatie met het voorvoegsel 0b.
U kunt het gemakkelijk omzetten in een numerieke waarde (integer type int), er bewerkingen op uitvoeren, en het dan weer omzetten in een string str.
a = '0b1001'
b = '0b0011'
c = int(a, 0) + int(b, 0)
print(c)
print(bin(c))
# 12
# 0b1100
Omrekenen tussen binaire, octale en hexadecimale getallen
Het is ook gemakkelijk om binaire, octale en hexadecimale strings naar elkaar om te zetten. Eenmaal geconverteerd naar een numerieke int, kan deze worden geconverteerd naar een string van elk formaat.
Nulvulling, voorvoegsels, enz. kunnen worden geregeld door de opmaakspecificatiestring.
a_0b = '0b1110001010011'
print(format(int(a, 0), '#010x'))
# 0x00000009
print(format(int(a, 0), '#010o'))
# 0o00000011