Questão 12 - Convertendo um número decimal fracionário para binário. Código em Python:
def decimal_para_binario_fracionario(num):
parte_inteira = int(num)
parte_fracionaria = num - parte_inteira
binario = bin(parte_inteira)[2:] + '.' \# Remove "0b"
while parte_fracionaria $>0$ :
parte_fracionaria *= 2
bit = int(parte_fracionaria)
binario += str(bit)
parte_fracionaria -= bit
return binario
num = float(input("Digite um número decimal fracionário: “))
print(f"Representação binária: {decimal_para_binario_fracionario(num)}”)
Explicação:
A parte inteira é convertida normalmente (bin()).
A parte fracionária é multiplicada por 2 sucessivamente.
Exemplo:
em binário.
def decimal_para_binario_fracionario(num):
parte_inteira = int(num)
parte_fracionaria = num - parte_inteira
binario = bin(parte_inteira)[2:] + '.' \# Remove "0b"
while parte_fracionaria $>0$ :
parte_fracionaria *= 2
bit = int(parte_fracionaria)
binario += str(bit)
parte_fracionaria -= bit
return binario
print(f"Representação binária: {decimal_para_binario_fracionario(num)}”)
A parte inteira é convertida normalmente (bin()).
A parte fracionária é multiplicada por 2 sucessivamente.
Exemplo:
Passo 1
Beleza, aqui a ideia é criar em Python um jeito de converter qualquer número decimal com parte fracionária (tipo 10.625 ou 0.75) pra binário. O conteúdo é “sistemas de numeração” e, mais especificamente, “conversão de decimal pra binário”. Vamos precisar de:
- Como converter a parte inteira pra binário (divisão sucessiva por 2 ou usar a função
bin()
do Python). - Como converter a parte fracionária (multiplicação sucessiva por 2).
Passo 2
Converter a parte inteira:
Teoria: num sistema posicional, pra achar o binário de um inteiro a gente divide por 2 repetidas vezes, anotando os restos (0 ou 1) e lendo de baixo pra cima. Exemplo:
10 ÷ 2 = 5 resto 0
5 ÷ 2 = 2 resto 1
2 ÷ 2 = 1 resto 0
1 ÷ 2 = 0 resto 1
Lendo os restos de baixo pra cima: 1010₂.
Em Python,
Teoria: num sistema posicional, pra achar o binário de um inteiro a gente divide por 2 repetidas vezes, anotando os restos (0 ou 1) e lendo de baixo pra cima. Exemplo:
10 ÷ 2 = 5 resto 0
5 ÷ 2 = 2 resto 1
2 ÷ 2 = 1 resto 0
1 ÷ 2 = 0 resto 1
Lendo os restos de baixo pra cima: 1010₂.
Em Python,
bin(10)
já te dá a string '0b1010'
, daí você faz [2:]
pra remover o '0b'
.Passo 3
Converter a parte fracionária:
Teoria: pra cada etapa, você multiplica a parte fracionária por 2. Se o resultado for ≥1, o próximo bit é 1 e você subtrai 1; se for <1, o bit é 0 e você continua com esse valor. Você repete até a parte fracionária chegar a zero (ou até o número de bits desejado).
Exemplo rápido com 0.625:
0.625×2 = 1.25 → bit 1, sobra 0.25
0.25×2 = 0.5 → bit 0, sobra 0.5
0.5×2 = 1.0 → bit 1, sobra 0.0
Logo a parte fracionária vira
Teoria: pra cada etapa, você multiplica a parte fracionária por 2. Se o resultado for ≥1, o próximo bit é 1 e você subtrai 1; se for <1, o bit é 0 e você continua com esse valor. Você repete até a parte fracionária chegar a zero (ou até o número de bits desejado).
Exemplo rápido com 0.625:
0.625×2 = 1.25 → bit 1, sobra 0.25
0.25×2 = 0.5 → bit 0, sobra 0.5
0.5×2 = 1.0 → bit 1, sobra 0.0
Logo a parte fracionária vira
.101
₂.Passo 4
Explicando o código Python passo a passo:
def decimal_para_binario_fracionario(num):
parte_inteira = int(num) # joga fora a parte fracionária
parte_fracionaria = num - parte_inteira
# converte a parte inteira usando bin() e tira o '0b'
binario = bin(parte_inteira)[2:] + '.'
# enquanto ainda tiver fração diferente de zero...
while parte_fracionaria > 0:
parte_fracionaria *= 2 # multiplica por 2
bit = int(parte_fracionaria) # parte inteira vira o bit (0 ou 1)
binario += str(bit) # anexa ao resultado
parte_fracionaria -= bit # tira o bit pra continuar só com a fração
return binario
No final, a string
binario
é algo como '1010.101'
.Passo 5
Vamos ver um exemplo completo:
num = 10.625
– Parte inteira: 10 → 1010₂
– Parte fracionária: 0.625 → (×2→1.25:1, sobra 0.25; ×2→0.5:0, sobra 0.5; ×2→1.0:1, sobra 0.0) → 101₂
Concatena: 1010.101
num = 10.625
– Parte inteira: 10 → 1010₂
– Parte fracionária: 0.625 → (×2→1.25:1, sobra 0.25; ×2→0.5:0, sobra 0.5; ×2→1.0:1, sobra 0.0) → 101₂
Concatena: 1010.101
Resposta
Para num = 10.625, o código retorna a representação binária: 1010.101