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
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
a
.
Informações relevantes dadas pelo enunciado:
Informações relevantes dadas pelo enunciado:
- Valores são inteiros (não têm casa decimal).
- Todo valor está entre
e inclusive. - A linguagem alvo é a Linguagem C (podemos usar tipos padrão e, se disponível, os tipos de
).
Passo 2
Entender quais tipos inteiros o C oferece e como escolher: explicação didática e simples.
- Tipos inteiros comuns em C:
, , , . 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
bits: vai de até . Expl.: para bits o intervalo é a . - Em muitos compiladores (caso típico):
tem bits, tem bits, tem ou bits. Mas não é preciso decorar essas exceções: a ideia é escolher o tipo com largura mínima que cubra a .
Passo 3
Aplicando ao intervalo
a
:
- Um inteiro sem sinal de
bits (ou seja, um tipo cujo valor máximo é pelo menos ) é suficiente porque . - Em C moderno, o tipo exato de 8 bits sem sinal é
(definido em ). Ele garante exatamente bits em implementações que suportam esse tipo. - Se você não quer (ou não pode) usar
, o equivalente prático e muito usado é , que normalmente tem bits e intervalo a .
Passo 4
Por que preferir
ou
: 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
valores, com 1 byte cada você usa bytes; com 4 bytes cada você usa bytes. Escrito em contas: bytes contra bytes. - Semântica correta: como os valores nunca são negativos, usar um tipo unsigned torna explícita essa restrição.
- Portabilidade: prefira
quando disponível (C99 ou posterior). Se por algum motivo não existir no sistema, é a escolha prática. - Atenção a detalhes: operações aritméticas promovem tipos pequenos (como
) para durante cálculos em expressões; isso normalmente não causa problema, só é bom saber que as variáveis temporárias podem virar na expressão.
Passo 5
Exemplos de declaração (para usar direto na prova ou no código):
- Usando o tipo exato de largura:
(precisa incluir ). - Usando o tipo clássico:
.
Resposta
Números inteiros de
a
:
(ou
se
não estiver disponível)