Tracks
/
Python
Python
/
Temario
/
Binario, octal y hexadecimal
Bi

Binario, octal y hexadecimal en Python

{one: "1 ejercicio", many: "%{count} de ejercicios", other: "%{count} ejercicios"}

Acerca de Binario, octal y hexadecimal

El binario, el octal y el hexadecimal (también conocido como hex) son sistemas de numeración distintos, con bases distintas. El binario es base 2, el octal es base 8 y el hexadecimal es base 16. Los números enteros normales son base 10 en Python. El binario, el octal y el hexadecimal son representaciones de números enteros. Esto significa que representan números positivos y negativos (incluido el cero) sin fracciones ni decimales, y que admiten todas las operaciones que podemos hacer con números enteros.

Binario

El binario es un sistema de numeración en base 2 que usa únicamente los dígitos 0 y 1. Suele representar los estados 0 («apagado») y 1 («encendido») del flujo eléctrico a través de transistores e interruptores en las computadoras, así como las cargas positiva y negativa en los medios de almacenamiento magnético. El binario puede representar todos los números enteros que se usan en base 10.

Un fragmento del sistema en base 2 se ve así, aunque continúa infinitamente y no se detiene en 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

Entonces, si queremos representar el número 6 en binario, sería 110.

Valor posicional 4 2 1
Número binario 1 1 0

Y la operación sería: 4 + 2 + 0 = 6

Otro ejemplo: 19

Valor posicional 16 8 4 2 1
Número binario 1 0 0 1 1

El número binario sería: 10011 Y la operación sería: 16 + 0 + 0 + 2 + 1 = 19

Binario en Python

En Python, podemos representar literales binarios usando el prefijo 0b. Si escribimos 0b10011, Python lo interpretará como un número binario y lo convertirá a base 10.

>>> 0b10011
19

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

El binario en Python es solo otra forma de escribir un número entero, así que la representación binaria es un número entero para todas las operaciones matemáticas.

Si escribes un número con el prefijo 0b que no esté en el sistema binario, se lanzará un SyntaxError.

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

Operaciones con números binarios

Como los números binarios son números enteros, podemos realizar con ellos todas las operaciones que hacemos con números enteros.

# addition
>>> 0b10011 + 0b10011
38

# multiplication
>>> 0b10011 * 0b10011
361

También podemos realizar operaciones entre representaciones binarias y representaciones enteras. Sin embargo, se aplican las reglas habituales de los operadores matemáticos: dividir dos números binarios o dos números enteros devolverá un float, incluso si la división no da como resultado una parte decimal.

>>> 0b10011 + 19
38

>>> 0b10011/0b10011
1.0

>>> 0b10011/3
6.333333333333333

Convertir hacia y desde la representación binaria

Python convertirá automáticamente un literal binario en int. Para convertir un int en una representación binaria, usa la función integrada [bin()][bin]. bin() devolverá un str con el equivalente binario y el prefijo 0b .

>>> bin(19)
'0b10011'

Para convertir un literal binario en un número entero, podemos usar la función integrada int() y pasarle un string con la representación binaria y un argumento de base:

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

Dar la base incorrecta (o una representación binaria no válida) lanzará 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'

Métodos de los números binarios

También hay algunos métodos especiales que podemos usar con los números binarios.

<int>.bit_length() devuelve el número de bits que se necesitan para representar el número:

>>> 0b11011.bit_length()
5

<int>.bit_count() devuelve el número de unos que hay en el número binario. Por ejemplo, bit_count() sobre '0b11011' devuelve 4:

>>> 0b11011.bit_count()
4
Note

Si trabajas localmente, bit_count() requiere al menos Python 3.10. Actualmente, el editor en línea de Exercism es compatible con todas las funcionalidades hasta Python 3.11.

Octal

El octal es un sistema de numeración en base 8. Usa los dígitos 0, 1, 2, 3, 4, 5, 6 y 7.

En Python, podemos representar números octales usando el prefijo 0o. Al igual que con el binario, Python convierte automáticamente una representación octal en un int.

>>> 0o123
83

Al igual que con el binario, los números octales son int y admiten todas las operaciones con números enteros. Si le pones el prefijo 0o a un número que no esté en el sistema octal, se lanzará un SyntaxError.

Convertir hacia y desde la representación octal

Para convertir un int en una representación octal, puedes usar la función integrada [oct()][oct]. Esta funciona de forma similar a la función bin() y devuelve un string:

>>> oct(83)
'0o123'

Para convertir un número octal en un número entero, podemos usar la función int() pasando una representación octal en string y la base (8) como argumentos:

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

Al igual que con el binario, si la base es incorrecta se lanzará un ValueError.

Hexadecimal

El hexadecimal es un sistema de numeración en base 16. Usa los dígitos 0 - 9 y las letras A, B, C, D, E y F. A es 10, B es 11, C es 12, D es 13, E es 14 y F es 15.

Podemos representar números hexadecimales en Python usando el prefijo 0x. Al igual que con el binario y el octal, Python convertirá automáticamente los literales hexadecimales a ints.

>>> 0x123
291

Al igual que con el binario y el octal, los literales hexadecimales son int y puedes realizar con ellos todas las operaciones con números enteros. Si le pones el prefijo 0x a un número que no sea hexadecimal, se lanzará un SyntaxError.

Convertir hacia y desde la representación hexadecimal

Para convertir un int en una representación hexadecimal, puedes usar la función integrada [hex()][hex]. Esta funciona de forma similar a la función bin() y devuelve un string:

>>> hex(291)
'0x123'

Para convertir una representación hexadecimal en un número entero, podemos usar la función int() pasando un string hexadecimal y la base (16) como argumentos:

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

Al igual que con el binario y el octal, si la base es incorrecta se lanzará un ValueError.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva