Conversões Matemáticas em Programação: Binário, Decimal, Hexadecimal

Já imaginou como o computador entende números? Por trás de cada cor em CSS, cada endereço de rede e cada permissão de arquivo, existem conversões entre sistemas numéricos. Neste guia você vai dominar as principais conversões — decimal, binário, hexadecimal — e as operações bit a bit que fazem parte do dia a dia de quem programa.

O que são sistemas numéricos?

Um sistema numérico define como representamos quantidades usando um conjunto de símbolos. No dia a dia usamos o sistema decimal (base 10), com algarismos de 0 a 9. Computadores, porém, trabalham internamente com o sistema binário (base 2), usando apenas 0 e 1. Já o sistema hexadecimal (base 16) é uma representação compacta muito usada por programadores para exibir bytes e endereços de memória.

Entender como converter entre essas bases é fundamental para trabalhar com máscaras de rede, manipulação de bits, cores hexadecimais, permissões de arquivos e otimização de código de baixo nível. Vamos mergulhar em cada conversão com exemplos práticos.

Decimal para Binário

A conversão de um número decimal para binário pode ser feita por divisões sucessivas por 2. O resto de cada divisão forma o dígito binário, lido de baixo para cima.

Exemplo: Converter 13 para binário.

13 ÷ 2 = 6 resto 1
 6 ÷ 2 = 3 resto 0
 3 ÷ 2 = 1 resto 1
 1 ÷ 2 = 0 resto 1
→ Lendo de baixo para cima: 1101

Em JavaScript, você pode usar num.toString(2):

function decimalParaBinario(num) {
  return num.toString(2);
}
console.log(decimalParaBinario(13)); // "1101"

Binário para Decimal

Para converter um número binário de volta para decimal, multiplique cada dígito por 2 elevado à posição (começando da direita, posição 0) e some os resultados.

Exemplo: Converter 1101 para decimal.

1 × 2³ = 8
1 × 2² = 4
0 × 2¹ = 0
1 × 2⁰ = 1
Soma: 8 + 4 + 0 + 1 = 13

Em código:

function binarioParaDecimal(bin) {
  return parseInt(bin, 2);
}
console.log(binarioParaDecimal("1101")); // 13

Decimal para Hexadecimal

O sistema hexadecimal usa 16 símbolos: 0-9 e A-F (onde A=10, B=11, C=12, D=13, E=14, F=15). A conversão de decimal para hex é feita por divisões sucessivas por 16.

Exemplo: Converter 255 para hexadecimal.

255 ÷ 16 = 15 resto 15 (F)
15 ÷ 16 = 0 resto 15 (F)
→ Resultado: FF

Em JavaScript:

function decimalParaHex(num) {
  return num.toString(16).toUpperCase();
}
console.log(decimalParaHex(255)); // "FF"

Hexadecimal para Decimal

Para voltar de hexadecimal para decimal, multiplique cada dígito por 16 elevado à posição e some. Letras devem ser convertidas para seus valores numéricos.

Exemplo: Converter "A3" para decimal.

A = 10 → 10 × 16¹ = 160
3 = 3  → 3  × 16⁰ = 3
Soma: 160 + 3 = 163

Em código:

function hexParaDecimal(hex) {
  return parseInt(hex, 16);
}
console.log(hexParaDecimal("A3")); // 163

Conversão entre Bases Arbitrárias

Nem sempre as bases são 2, 10 ou 16. Às vezes precisamos converter um número de qualquer base (ex.: base 8, base 12) para decimal e depois para outra base. O processo geral é: primeiro converter para decimal usando o método posicional, depois converter de decimal para a base destino usando divisões sucessivas.

Exemplo: Converter o número octal (base 8) "17" para binário.

1. Octal "17" → decimal: 1×8¹ + 7×8⁰ = 8 + 7 = 15
2. Decimal 15 → binário: 15 ÷ 2 = 7 resto 1; 7÷2=3 resto 1; 3÷2=1 resto 1; 1÷2=0 resto 1 → 1111
Resultado: 1111

Em JavaScript, usamos parseInt(valor, baseOrigem) e .toString(baseDestino):

function converterBase(valor, baseOrigem, baseDestino) {
  const decimal = parseInt(valor, baseOrigem);
  return decimal.toString(baseDestino).toUpperCase();
}
console.log(converterBase("17", 8, 2)); // "1111"

Operações Bit a Bit (AND, OR, XOR, Shifts)

Além das conversões, a programação lida diretamente com bits através de operadores bit a bit. Eles tratam cada bit de um número inteiro e são extremamente rápidos.

  • AND (&): retorna 1 apenas quando ambos os bits são 1.
  • OR (|): retorna 1 quando pelo menos um dos bits é 1.
  • XOR (^): retorna 1 quando os bits são diferentes.
  • Deslocamento à esquerda (<<): move os bits para a esquerda, preenchendo com 0, equivale a multiplicar por 2n.
  • Deslocamento à direita (>>): move os bits para a direita, equivale a dividir por 2n.

Exemplos:

let a = 5;  // 0101 em binário
let b = 3;  // 0011

console.log(a & b);  // 0001 → 1
console.log(a | b);  // 0111 → 7
console.log(a ^ b);  // 0110 → 6
console.log(a << 1); // 1010 → 10
console.log(a >> 1); // 0010 → 2

Essas operações são usadas em máscaras de rede, controle de permissões (Unix chmod), compressão de dados e até em jogos para otimizar cálculos.

Aplicações Práticas em Programação

Cores em CSS (hexadecimal): Cores no CSS são representadas por 6 dígitos hexadecimais (ex.: #FF5733). Cada par representa o valor de vermelho, verde e azul em decimal. Saber converter hexadecimal para decimal ajuda a entender a intensidade de cada canal.

Máscaras de Rede: Endereços IP e máscaras são expressos em decimal, mas internamente são binários. Operações AND entre IP e máscara determinam a rede. Por exemplo, 192.168.1.0/24 usa uma máscara que em binário tem 24 bits 1.

Permissões de Arquivos (Unix): As permissões rwx são codificadas em octal (base 8), que é uma forma compacta de binário. Cada grupo de 3 bits representa permissões de leitura, escrita e execução. Conversões entre octal e binário aparecem diretamente ao usar chmod 755.

Dominar esses conceitos torna você um desenvolvedor mais completo. Quer praticar ainda mais? Explore nossa lista de exercícios de lógica ou veja como implementar esses algoritmos em JavaScript.

Perguntas Frequentes

O que é binário?

Binário é um sistema numérico de base 2 que usa apenas os dígitos 0 e 1. É a linguagem nativa dos computadores, onde cada dígito representa um estado elétrico (ligado/desligado).

Por que usar hexadecimal?

Hexadecimal é mais compacto que binário e mais fácil de ler para humanos. Um byte (8 bits) pode ser representado por apenas dois dígitos hexadecimais, enquanto em binário seriam oito dígitos.

Qual a forma mais rápida de converter entre bases na programação?

A maioria das linguagens oferece funções nativas: em JavaScript, parseInt e toString; em Python, bin, hex, int; em PHP, bindec, hexdec, base_convert. Aprender o algoritmo manual ajuda a entender o processo e resolve situações onde essas funções não estão disponíveis.

Conclusão

As conversões matemáticas entre sistemas numéricos e as operações bit a bit são habilidades essenciais para qualquer programador que deseja ir além do básico. Elas estão presentes em áreas como redes, segurança, computação gráfica e desenvolvimento web.

Continue aprofundando seus conhecimentos com nossos estudos de programação e lógica. Acesse a coleção interativa de estudos de lógica para ver exercícios práticos e se desafiar com problemas reais. Se você está aprendendo PHP, confira nosso guia de PHP prático para aplicar esses conceitos em back-end.

Com prática constante, essas conversões se tornam automáticas e você vai perceber como os números estão no coração da computação. Bons estudos! Bônus de boas-vindas até R$1.500