Um programa de computador, ao efetuar apenas operações com i...

Próximas questões
Com base no mesmo assunto
Q2523603 Programação
Um programa de computador, ao efetuar apenas operações com inteiros, fornecerá para a expressão  

 ((7/4)*4) + (((unsigned int)(-9)/2)*2) 

o seguinte resultado: 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: E - –6.

1. Tema central da questão:

Esta questão aborda operações aritméticas com inteiros em programação, principalmente envolvendo divisão inteira e manipulação de tipos como unsigned int. Saber como as linguagens de programação (como C/C++) lidam com esses casos é essencial em concursos públicos de TI.

2. Teoria relevante:

Divisão inteira: quando dividimos inteiros, o resultado é também inteiro (parte decimal é descartada).

unsigned int: é um inteiro sem sinal, apenas valores positivos. Em C, se convertemos um número negativo para unsigned int, o valor é ajustado pelo complemento de dois. Por exemplo, (unsigned int)(-9) em um sistema de 32 bits fica igual a 4294967287 (pois 2³² – 9 = 4294967287).

Fonte: cppreference.com

3. Justificativa da alternativa correta:

Vamos analisar a expressão:

((7/4)*4) + (((unsigned int)(-9)/2)*2)

  • 7/4 = 1 (divisão inteira)
  • 1 * 4 = 4
  • (unsigned int)(-9) = 4294967287
  • 4294967287 / 2 = 2147483643 (divisão inteira)
  • 2147483643 * 2 = 4294967286
  • 4 + 4294967286 = 4294967290

Porém, se o resultado for armazenado em um int (valor com sinal), isso representa um número negativo em complemento de dois:
4294967290 - 4294967296 = -6

Por isso, a resposta é -6.

4. Por que as outras alternativas estão incorretas?

  • A - 0: Desconsidera as operações de conversão e overflow.
  • B - –2: Erro no cálculo do complemento de dois.
  • C - –4: Falha ao somar corretamente os resultados parciais.
  • D - +3: Resultado impossível por conta da magnitude do valor positivo após a conversão.

5. Estratégias de resolução:

Leia cuidadosamente e destaque tipos de dados (int, unsigned int).
Identifique operações inteiras (nunca haverá casas decimais).
Lembre-se: converter para unsigned int pode gerar valores muito grandes que, ao voltar para signed, viram negativos!
Atente-se para possíveis pegadinhas envolvendo conversão de tipos e overflow.

Gostou do comentário? Deixe sua avaliação aqui embaixo!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo