Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — FGV 2024

ProgramaçãoConceitos básicos de programação
Código
fg086203
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Desenvolvimento de Sistemas de Suprimento de Energia para Satélites
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:
  1. A0.
  2. B–2.
  3. C–4.
  4. D+3.
  5. E–6.
Revelar gabarito e comentário

GabaritoE — –6.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Expressão com inteiros e conversão de tipo em C/C++

Gabarito: letra E ( –6 ). O resultado final é obtido considerando que (unsigned int)(-9) converte -9 para um valor grande positivo (4294967287 em 32 bits), a divisão e multiplicação mantêm o valor alto, e a soma com 4 (convertido para unsigned) gera 4294967290, que, interpretado como signed, equivale a –6. A chave é entender o comportamento da conversão de negativos para unsigned e a aritmética de complemento de dois.

Passo a passo

Expressão: ((7/4)*4) + (((unsigned int)(-9)/2)*2)

  1. 7/4 → divisão inteira: 1 (trunca para zero).

  2. 1*4 = 4.

  3. (unsigned int)(-9) → em sistemas 32 bits, -9 vira 4294967287 (2^32 – 9).

  4. 4294967287 / 2 → 2147483643 (divisão unsigned, trunca para zero).

  5. 2147483643 * 2 = 4294967286.

  6. Soma: 4 + 4294967286 = 4294967290 (em unsigned).

  7. Esse valor (0xFFFFFFFA) é interpretado como signed: –6.

  1. 17/4 = 1 (divisão inteira)
  2. 21×4 = 4
  3. 3(unsigned int)(-9) = 4294967287
  4. 44294967287/2 = 2147483643
  5. 52147483643×2 = 4294967286
  6. 64 + 4294967286 = 4294967290
  7. 7Interpretado como signed: -6
LEVEL · soulevel.com.br

Alternativas

Alternativa A — ❌ Incorreta (0)

Ocorreria se a segunda parte se anulasse, mas não é o caso.

Alternativa B — ❌ Incorreta (–2)

Resultado de um erro de interpretação (ex.: tratar divisão de -9/2 como –5 e depois cast).

Alternativa C — ❌ Incorreta (–4)

Possível se a divisão de -9/2 fosse –4 (truncamento em direção a zero) mas sem considerar o efeito do cast unsigned.

Alternativa D — ❌ Incorreta (+3)

Resultado de cálculos incorretos (ex.: 7/4 = 1.75 arredondado para 2, etc.).

Alternativa E — ✅ Correta ⟵ GABARITO

Conforme demonstrado, o valor final interpretado como signed é –6.

NÃO CAIA NESSA!

A banca explora a combinação de conversão de negativos para unsigned e a posterior interpretação do resultado como signed. Muitos candidatos esquecem que (unsigned int)(-9) gera um número enorme, e que a soma final precisa ser vista em complemento de dois. Lembre-se: em C/C++, a conversão de signed para unsigned é bem definida (aritmética modular), e a aritmética unsigned também é modular; ao final, se o contexto espera um signed, o bit pattern é reinterpretado.

Gabarito: letra E.

Link permanente: /questoes/fg086203