Suponha que você precise representar os valores indicados nos itens abaixo em um programa escrito na Linguagem C. Indique o tipo de dado mais adequado para cada caso, explicando o porquê da escolha.
Números inteiros de 0 a 100

Passo 1

O enunciado pede que eu escolha o tipo de dado mais adequado em C para representar números inteiros no intervalo de \,0 a \,100.
Informações relevantes dadas pelo enunciado:
  • Valores são inteiros (não têm casa decimal).
  • Todo valor está entre \,0 e \,100 inclusive.
  • A linguagem alvo é a Linguagem C (podemos usar tipos padrão e, se disponível, os tipos de \texttt{<stdint.h>}).

Passo 2

Entender quais tipos inteiros o C oferece e como escolher: explicação didática e simples.
  • Tipos inteiros comuns em C: \texttt{char}, \texttt{short}, \texttt{int}, \texttt{long}. Cada um pode ser “signed” (com sinal) ou “unsigned” (sem sinal).
  • O que significa “unsigned”: um tipo unsigned só representa números não-negativos; isso aproveita todos os bits para valores positivos, aumentando o maior valor representável.
  • Como calcular o intervalo de um inteiro sem sinal com n bits: vai de \,0 até \,2^{n}-1. Expl.: para n=8 bits o intervalo é \,0 a \,2^{8}-1 = 255.
  • Em muitos compiladores (caso típico): \texttt{char} tem 8 bits, \texttt{short} tem 16 bits, \texttt{int} tem 16 ou 32 bits. Mas não é preciso decorar essas exceções: a ideia é escolher o tipo com largura mínima que cubra \,0 a \,100.

Passo 3

Aplicando ao intervalo \,0 a \,100:
  • Um inteiro sem sinal de 8 bits (ou seja, um tipo cujo valor máximo é pelo menos \,255) é suficiente porque \,100 \le 255.
  • Em C moderno, o tipo exato de 8 bits sem sinal é \texttt{uint8\_t} (definido em \texttt{<stdint.h>}). Ele garante exatamente 8 bits em implementações que suportam esse tipo.
  • Se você não quer (ou não pode) usar \texttt{<stdint.h>}, o equivalente prático e muito usado é \texttt{unsigned char}, que normalmente tem 8 bits e intervalo \,0 a \,255.

Passo 4

Por que preferir \texttt{uint8\_t} ou \texttt{unsigned char}: vantagens e observações práticas.
  • Eficiência de memória: armazenar muitos valores em um array com 1 byte por elemento é bem mais econômico do que usar 4 bytes por elemento. Exemplo rápido: para armazenar 1000 valores, com 1 byte cada você usa 1000 bytes; com 4 bytes cada você usa 4000 bytes. Escrito em contas: \,1000\times 1 = 1000 bytes contra \,1000\times 4 = 4000 bytes.
  • Semântica correta: como os valores nunca são negativos, usar um tipo unsigned torna explícita essa restrição.
  • Portabilidade: prefira \texttt{uint8\_t} quando disponível (C99 ou posterior). Se por algum motivo \texttt{uint8\_t} não existir no sistema, \texttt{unsigned char} é a escolha prática.
  • Atenção a detalhes: operações aritméticas promovem tipos pequenos (como \texttt{unsigned char}) para \texttt{int} durante cálculos em expressões; isso normalmente não causa problema, só é bom saber que as variáveis temporárias podem virar \texttt{int} na expressão.

Passo 5

Exemplos de declaração (para usar direto na prova ou no código):
  • Usando o tipo exato de largura: \texttt{uint8\_t x = 100;} (precisa incluir \texttt{<stdint.h>}).
  • Usando o tipo clássico: \texttt{unsigned char x = 100;}.

Resposta

Números inteiros de \,0 a \,100: \texttt{uint8\_t} (ou \texttt{unsigned char} se \texttt{stdint.h} não estiver disponível)

Exercícios relacionados