Python poate gestiona numere și șiruri de caractere ca numere binare, octale și hexazecimale, precum și numerele zecimale obișnuite. De asemenea, este ușor de convertit între ele.
În această secțiune vor fi explicate următoarele conținuturi, împreună cu exemple de cod.
- Scrieți numere întregi în binar, octal și hexazecimal.
- Conversia numerelor în șiruri de caractere în notație binară, octală și hexazecimală.
- funcție încorporată (de exemplu, în limbajul de programare)
bin()
,oct()
,hex()
- metoda șirului de caractere
str.format()
, Funcții încorporateformat()
, f string - Convertește un număr întreg negativ într-un șir de caractere în format complement la doi.
- funcție încorporată (de exemplu, în limbajul de programare)
- Conversia șirurilor de caractere în notație binară, octală și hexazecimală în numere.
- funcție încorporată (de exemplu, în limbajul de programare)
int()
- funcție încorporată (de exemplu, în limbajul de programare)
- Exemple de aplicații
- Aritmetica șirurilor binare
- Conversia între numere binare, octale și hexazecimale
Scrieți numere întregi în binar, octal și hexazecimal.
Prin adăugarea următoarelor prefixe, numerele întregi int pot fi scrise în binar, octal și, respectiv, hexazecimal.
De asemenea, puteți folosi majuscule.
- Număr binar:
0b
sau0B
- Octal:
0o
sau0O
- Număr hexazecimal:
0x
sau0X
Rezultatul din print() va fi în notație zecimală.
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
Chiar și cu prefixul, tipul este un întreg 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'>
Deoarece este un tip de număr întreg, poate fi utilizat pentru operații aritmetice obișnuite.
result = 0b10 * 0o10 + 0x10
print(result)
# 32
Începând cu Python 3.6, este posibil să se insereze caracterele de subliniere _ în numere. Repetarea unui semn de subliniere _ va avea ca rezultat o eroare, dar puteți insera câte doriți, atâta timp cât nu îl repetați.
Sublinierea _ nu afectează numărul, astfel încât poate fi utilizată ca separator atunci când există mai multe cifre. De exemplu, inserarea unui semn de subliniere _ la fiecare patru cifre este ușor de citit.
print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True
bin_num = 0b1111_1111_1111
print(bin_num)
# 4095
Conversia numerelor în șiruri de caractere în notație binară, octală și hexazecimală.
Pentru a converti un număr într-un șir de caractere în notație binară, octală sau hexazecimală, utilizați următoarele funcții încorporate.
- funcție încorporată (de exemplu, în limbajul de programare)
bin()
,oct()
,hex()
- metoda șirului de caractere
str.format()
, Funcții încorporateformat()
, f string
Această secțiune explică, de asemenea, cum se obține un șir de caractere exprimat în format complement la doi pentru valori negative.
Funcții încorporate bin(), oct(), hex()
Următoarele funcții încorporate pot converti numere în șiruri binare, octale și hexazecimale.
- Număr binar:
bin()
- Octal:
oct()
- Număr hexazecimal:
hex()
Fiecare returnează un șir de caractere cu următoarele prefixe
- Număr binar:
0b
- Octal:
0o
- Număr hexazecimal:
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'>
Dacă nu aveți nevoie de prefix, utilizați slice[2:] pentru a extrage șirul din spatele acestuia sau utilizați format(), după cum se explică în continuare.
print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff
Dacă doriți să îl convertiți într-un șir de caractere zecimale, puteți utiliza str().
print(str(i))
# 255
print(type(str(i)))
# <class 'str'>
Funcția încorporată format(), șir de caractere metoda str.format(), f string
Funcția încorporată format() și metodele string str.format() și f-string pot, de asemenea, converti numere în șiruri binare, octale și hexazecimale.
Prin specificarea celui de-al doilea argument al format() după cum urmează, acesta poate fi convertit în șiruri binare, octale și, respectiv, hexazecimale.
- Număr binar:
b
- Octal:
o
- Număr hexazecimal:
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'>
Dacă doriți să obțineți un șir de caractere cu prefixul 0b,0o,0x, adăugați # la șirul de specificații de formatare.
print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff
De asemenea, este posibil să se completeze 0 cu orice număr de cifre. Rețineți că numărul de caractere pentru prefix (două caractere) trebuie, de asemenea, să fie luat în considerare atunci când se completează zero cu un prefix.
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 string str.format() poate fi utilizată, de asemenea, pentru conversie.
print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff
Începând cu Python 3.6, puteți utiliza, de asemenea, șirul f.f'xxx'
print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff
Convertește un număr întreg negativ într-un șir de caractere în format complement la doi.
Atunci când un număr întreg negativ este convertit într-un șir binar sau hexazecimal folosind bin() sau format(), valoarea absolută va avea un semn minus.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
În Python, operațiile de tip bitwise asupra numerelor întregi negative sunt, de asemenea, efectuate în reprezentarea complementului la doi. Prin urmare, dacă doriți să obțineți un șir de caractere exprimat în forma complementului la doi, puteți efectua un OR& logic bitwise cu numărul maxim de cifre de biți necesar, după cum urmează.
- 4bit:
0b1111(=0xf)
- 8bit:
0xff
- 16bit:
0xffff
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7
Conversia șirurilor de caractere în notație binară, octală și hexazecimală în numere.
Funcția încorporată int()
Pentru a converti un șir de caractere în notație binară, octală sau hexazecimală într-un număr, utilizați funcția încorporată int().
Cu int(string, radix), un șir de caractere str în notație binară, octală, hexazecimal etc. poate fi convertit într-un int numeric pe baza radixului. În cazul în care radixul este omis, numărul este considerat a fi zecimal.
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'>
În cazul în care radixul este setat la 0, conversia se face pe baza următorului prefix de șir.
- Prefix binar:
0b
sau0B
- Prefix octal:
0o
sau0O
- Prefix hexazecimal:
0x
sau0X
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
Dacă numărul de bază este 0 și nu există un prefix, acesta va fi convertit ca număr zecimal, dar rețineți că, dacă începutul (partea stângă) este completat cu 0, se va produce o eroare.
print(int('10', 0))
# 10
# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'
În alte cazuri, șirurile umplute cu zero pot fi convertite ca atare.
print(int('010'))
# 10
print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255
În cazul în care șirul nu poate fi convertit cu radixul sau prefixul specificat, apare o eroare.
# 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'
Exemple de aplicații
Aritmetica șirurilor binare
De exemplu, pentru a efectua o operație asupra unui șir de caractere în notație binară cu prefixul 0b.
Puteți să o convertiți cu ușurință într-o valoare numerică (tip întreg int), să efectuați operații asupra ei și apoi să o convertiți din nou într-un șir de caractere str.
a = '0b1001'
b = '0b0011'
c = int(a, 0) + int(b, 0)
print(c)
print(bin(c))
# 12
# 0b1100
Conversia între numere binare, octale și hexazecimale
De asemenea, este ușor de convertit șirurile binare, octale și hexazecimale între ele. Odată convertit într-un int numeric, acesta poate fi convertit într-un șir de caractere de orice format.
Umplerea cu zero, prefixarea etc. poate fi controlată prin șirul de specificații de formatare.
a_0b = '0b1110001010011'
print(format(int(a, 0), '#010x'))
# 0x00000009
print(format(int(a, 0), '#010o'))
# 0o00000011