Exercícios de C/C++ para iniciantes

Converter decimal para binário em C e C++

Nesta lição, você vai converter um inteiro positivo de decimal para binário com divisões sucessivas por 2.

Introdução

Para converter um número para binário, dividimos o número por 2 repetidamente e anotamos o resto de cada divisão. Os restos são os dígitos binários, mas aparecem na ordem do último dígito (o menos significativo) para o primeiro.

Pontos importantes

  • Ative os avisos do compilador (compiler warnings) e corrija todos eles.
  • Entenda o tipo de dado e o tempo de vida (lifetime) de cada valor.
  • Sempre valide os dados de entrada e os limites dos índices de arrays.

Exemplos de código C e C++

C
Executar →
main.c
#include <stdio.h>
int main(void) {
    unsigned number = 13, value = number; int bits[32], count = 0;
    // Store remainders generated from right to left.
    do { bits[count++] = value % 2; value /= 2; } while (value);
    printf("%u = ", number); while (count) printf("%d", bits[--count]); puts("");
}
Resultado da execução
13 = 1101
C++
Executar →
main.cpp
#include <bitset>
#include <iostream>
#include <string>
int main() {
    unsigned number = 13;
    // Remove leading zeroes from a fixed-width bitset string.
    std::string bits = std::bitset<32>(number).to_string();
    bits.erase(0, bits.find_first_not_of('0'));
    std::cout << number << " = " << bits << '\n';
}
Resultado da execução
13 = 1101

Comparação entre C e C++

O laço do-while guarda o resto value % 2 no array bits e divide value por 2, até value chegar a 0. O do-while garante que o número 0 ainda tenha pelo menos um dígito. Como as divisões encontram primeiro o último dígito, o programa imprime o array bits na ordem inversa, então 13 sai como 1101.

C

C usa funções procedurais pequenas e deixa à vista como os dados ficam na memória.

C++

C++ continua permitindo trabalhar em baixo nível, mas acrescenta tipos da biblioteca e abstrações mais seguras.

Exercícios práticos

Execute as duas versões e depois mude o código para observar a diferença de segurança que cada linguagem oferece.

  • Teste entradas inválidas e valores nos limites.
  • Compile com as flags -Wall -Wextra -Wpedantic para ativar mais avisos.
  • Separe as declarações compartilhadas em um arquivo de cabeçalho e a implementação em outro arquivo.

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios