Trilhas
/
Python
Python
/
Programa
/
Binário, octal e hexadecimal
Bi

Binário, octal e hexadecimal em Python

{one: "1 exercício", many: "%{count} de exercícios", other: "%{count} exercícios"}

Sobre Binário, octal e hexadecimal

Binário, octal e hexadecimal (também conhecido como hex) são diferentes sistemas de numeração com bases diferentes. O binário é base 2, o octal é base 8 e o hexadecimal é base 16. Os números inteiros comuns são base 10 em Python. Binário, octal e hexadecimal são todos representações de números inteiros. Isso significa que eles representam números positivos e negativos (incluindo o zero) sem frações ou decimais, e dão suporte a todas as operações que podemos fazer com números inteiros.

Binário

O binário é um sistema de numeração de base 2, que usa apenas os dígitos 0 e 1. Ele costuma representar os estados 0 ("desligado") e 1 ("ligado") do fluxo elétrico através de transistores e chaves nos computadores, bem como as cargas positivas e negativas em meios de armazenamento magnético. O binário pode representar todos os números inteiros usados na base 10.

Um trecho do sistema de base 2 é assim, embora continue infinitamente e não pare em 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

Então, se quisermos representar o número 6 em binário, ele seria 110.

Valor posicional 4 2 1
Número binário 1 1 0

E a operação seria: 4 + 2 + 0 = 6

Outro exemplo: 19

Valor posicional 16 8 4 2 1
Número binário 1 0 0 1 1

O número binário seria: 10011 E a operação seria: 16 + 0 + 0 + 2 + 1 = 19

Binário em Python

Em Python, podemos representar literais binários usando o prefixo 0b. Se escrevermos 0b10011, o Python vai interpretá-lo como um número binário e convertê-lo para a base 10.

>>> 0b10011
19

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

O binário em Python é apenas uma forma diferente de escrever um número inteiro, então a representação binária é um número inteiro para todas as operações matemáticas.

Se você escrever um número com o prefixo 0b que não esteja no sistema binário, isso vai gerar um SyntaxError.

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

Operações com números binários

Como os números binários são números inteiros, podemos realizar neles todas as operações que podemos fazer com números inteiros.

# addition
>>> 0b10011 + 0b10011
38

# multiplication
>>> 0b10011 * 0b10011
361

Também podemos realizar operações entre as representações binária e inteira. No entanto, valem as regras matemáticas de sempre para operadores: dividir dois números binários ou inteiros retorna um float, mesmo que a divisão não resulte em parte decimal.

>>> 0b10011 + 19
38

>>> 0b10011/0b10011
1.0

>>> 0b10011/3
6.333333333333333

Conversão de e para a representação binária

O Python converte automaticamente um literal binário em int. Para converter um int em uma representação binária, use a função interna [bin()][bin]. bin() retorna uma str do equivalente binário com o prefixo 0b .

>>> bin(19)
'0b10011'

Para converter um literal binário em um número inteiro, podemos usar a função interna int() e passar uma string com a representação binária e um argumento de base:

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

Passar a base errada (ou uma representação binária inválida) gera um 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 binários

Existem também alguns métodos especiais que podemos usar em números binários.

<int>.bit_length() retorna o número de bits necessários para representar o número:

>>> 0b11011.bit_length()
5

<int>.bit_count() retorna a quantidade de uns no número binário. Por exemplo, bit_count() em '0b11011' retorna 4:

>>> 0b11011.bit_count()
4
Note

Se você estiver trabalhando localmente, o bit_count() exige pelo menos o Python 3.10. No momento, o editor online do Exercism oferece suporte a todos os recursos até o Python 3.11.

Octal

O octal é um sistema de numeração de base 8. Ele usa os dígitos 0, 1, 2, 3, 4, 5, 6 e 7.

Em Python, podemos representar números octais usando o prefixo 0o. Assim como no caso do binário, o Python converte automaticamente uma representação octal em int.

>>> 0o123
83

Assim como no binário, os números octais são números inteiros e dão suporte a todas as operações com inteiros. Colocar o prefixo 0o em um número que não esteja no sistema octal gera um SyntaxError.

Conversão de e para a representação octal

Para converter um int em uma representação octal, você pode usar a função interna [oct()][oct]. Ela funciona de forma parecida com a função bin(), retornando uma string:

>>> oct(83)
'0o123'

Para converter um número octal em um número inteiro, podemos usar a função int(), passando uma string com a representação octal e a base (8) como argumentos:

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

Assim como no binário, passar a base errada gera um ValueError.

Hexadecimal

O hexadecimal é um sistema de numeração de base 16. Ele usa os dígitos de 0 a 9 e as letras A, B, C, D, E e F. A é 10, B é 11, C é 12, D é 13, E é 14 e F é 15.

Podemos representar números hexadecimais em Python usando o prefixo 0x. Assim como no binário e no octal, o Python converte automaticamente literais hexadecimais em ints.

>>> 0x123
291

Assim como no binário e no octal, os literais hexadecimais são números inteiros, e você pode realizar neles todas as operações com inteiros. Colocar o prefixo 0x em um número que não seja hexadecimal gera um SyntaxError.

Conversão de e para a representação hexadecimal

Para converter um int em uma representação hexadecimal, você pode usar a função interna [hex()][hex]. Ela funciona de forma parecida com a função bin(), retornando uma string:

>>> hex(291)
'0x123'

Para converter uma representação hexadecimal em um número inteiro, podemos usar a função int(), passando uma string hexadecimal com a base (16) como argumentos:

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

Assim como no binário e no octal, passar a base errada gera um ValueError.

Editar via GitHub O link abre em uma nova janela ou aba