Tracce
/
Python
Python
/
Programma
/
Binario, ottale ed esadecimale
Bi

Binario, ottale ed esadecimale in Python

{one: "1 esercizio", many: "%{count} esercizi", other: "%{count} esercizi"}

Informazioni su Binario, ottale ed esadecimale

Il sistema binario, il sistema ottale e il sistema esadecimale (noto anche come hex) sono sistemi numerici diversi con basi diverse. Il binario è in base 2, l'ottale è in base 8 e l'esadecimale è in base 16. I normali numeri interi sono in base 10 in Python. Il binario, l'ottale e l'esadecimale sono tutte rappresentazioni di numeri interi. Ciò significa che rappresentano numeri positivi e negativi (incluso lo zero) senza frazioni o decimali, e supportano tutte le operazioni che possiamo fare con i numeri interi.

Binario

Il binario è un sistema numerico in base 2, che usa solo le cifre 0 e 1. Rappresenta comunemente gli stati 0 («spento») e 1 («acceso») del flusso elettrico attraverso transistor e interruttori nei computer, così come le cariche positive e negative nei supporti di memorizzazione magnetica. Il binario può rappresentare tutti i numeri interi che vengono usati in base 10.

Un frammento del sistema in base 2 è questo, anche se continua all'infinito e non si ferma a 128:

128 64 32 16 8 4 2 1
2 ** 7 2 ** 6 2 ** 5 2 ** 4 2 ** 3 2 ** 2 2 ** 1 2 ** 0

Quindi, se vogliamo rappresentare il numero 6 in binario, sarebbe 110.

Place value 4 2 1
Binary number 1 1 0

E l'operazione sarebbe: 4 + 2 + 0 = 6

Un altro esempio: 19

Place value 16 8 4 2 1
Binary number 1 0 0 1 1

Il numero binario sarebbe: 10011 E l'operazione sarebbe: 16 + 0 + 0 + 2 + 1 = 19

Binario in Python

In Python, possiamo rappresentare i letterali binari usando il prefisso 0b. Se scriviamo 0b10011, Python lo interpreterà come un numero binario e lo convertirà in base 10.

>>> 0b10011
19

>>> type(0b10011)
<class 'int'>

In Python, il binario è solo un modo diverso di scrivere un numero intero, quindi la rappresentazione binaria è un numero intero per tutte le operazioni matematiche.

Se scrivi un numero con il prefisso 0b che non appartiene al sistema binario, verrà generato un SyntaxError.

Traceback (most recent call last):
  File "c:\binary.py", line 1, in <module>
    0b10211
SyntaxError: invalid digit '2' in binary literal

Operazioni con i numeri binari

Dato che i numeri binari sono numeri interi, possiamo eseguire su di essi tutte le operazioni che possiamo fare con i numeri interi.

# addition
>>> 0b10011 + 0b10011
38

# multiplication
>>> 0b10011 * 0b10011
361

Possiamo anche eseguire operazioni tra rappresentazioni binarie e rappresentazioni intere. Tuttavia, valgono le solite regole degli operatori matematici: dividere due numeri binari o due numeri interi restituirà un float, anche se la divisione non produce una parte decimale.

>>> 0b10011 + 19
38

>>> 0b10011/0b10011
1.0

>>> 0b10011/3
6.333333333333333

Convertire da e verso la rappresentazione binaria

Python converte automaticamente un letterale binario in un int. Per convertire un int in una rappresentazione binaria, usa la funzione integrata [bin()][bin]. bin() restituirà una str dell'equivalente binario con il prefisso 0b.

>>> bin(19)
'0b10011'

Per convertire un letterale binario in un numero intero, possiamo usare la funzione integrata int() e passare una stringa della rappresentazione binaria e l'argomento base:

>>> int("0b10011", 2)
19

Se si fornisce la base sbagliata (o una rappresentazione binaria non valida), verrà generato un ValueError:

Traceback (most recent call last):
  File "c:\binary.py", line 4, in <module>
    int("0b10011", 3)
ValueError: invalid literal for int() with base 3: '0b10011'

Metodi dei numeri binari

Ci sono anche alcuni metodi speciali che possiamo usare sui numeri binari.

<int>.bit_length() restituisce il numero di bit necessari per rappresentare il numero:

>>> 0b11011.bit_length()
5

<int>.bit_count() restituisce il numero di uni nel numero binario. Per esempio, bit_count() su '0b11011' restituisce 4:

>>> 0b11011.bit_count()
4
Note

Se lavori in locale, bit_count() richiede almeno Python 3.10. L'attuale editor online di Exercism supporta tutte le funzionalità fino a Python 3.11.

Ottale

L'ottale è un sistema numerico in base 8. Usa le cifre 0, 1, 2, 3, 4, 5, 6 e 7.

In Python, possiamo rappresentare i numeri ottali usando il prefisso 0o. Come per il binario, Python converte automaticamente una rappresentazione ottale in un int.

>>> 0o123
83

Come per il binario, i numeri ottali sono int e supportano tutte le operazioni sui numeri interi. Se si antepone 0o a un numero che non appartiene al sistema ottale, verrà generato un SyntaxError.

Convertire da e verso la rappresentazione ottale

Per convertire un int in una rappresentazione ottale, puoi usare la funzione integrata [oct()][oct]. Funziona in modo simile alla funzione bin(), restituendo una stringa:

>>> oct(83)
'0o123'

Per convertire un numero ottale in un numero intero, possiamo usare la funzione int(), passando come argomenti una stringa con la rappresentazione ottale e la base (8):

>>> int("0o123", 8)
83

Come per il binario, fornire la base sbagliata genererà un ValueError.

Esadecimale

L'esadecimale è un sistema numerico in base 16. Usa le cifre da 0 a 9 e le lettere A, B, C, D, E e F. A è 10, B è 11, C è 12, D è 13, E è 14 e F è 15.

Possiamo rappresentare i numeri esadecimali in Python usando il prefisso 0x. Come per il binario e l'ottale, Python convertirà automaticamente i letterali esadecimali in int.

>>> 0x123
291

Come per il binario e l'ottale, i letterali esadecimali sono int e puoi eseguire con essi tutte le operazioni sui numeri interi. Se si antepone 0x a un numero non esadecimale, verrà generato un SyntaxError.

Convertire da e verso la rappresentazione esadecimale

Per convertire un int in una rappresentazione esadecimale, puoi usare la funzione integrata [hex()][hex]. Funziona in modo simile alla funzione bin(), restituendo una stringa:

>>> hex(291)
'0x123'

Per convertire una rappresentazione esadecimale in un numero intero, possiamo usare la funzione int(), passando come argomenti una stringa esadecimale e la base (16):

>>> int("0x123", 16)
291

Come per il binario e l'ottale, fornire la base sbagliata genererà un ValueError.

Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda