Bom pessoal, tudo legal? Espero que os estudos estejam correndo bem, pois o tempo não para de correr.
Estava me dedicando a algumas matérias, dentre elas, PROGRAMAÇÃO EM C e resolvi postar mais esta resolução, vamos lá?
Questão 65 de 2011
Considere a seguinte declaração em linguagem C:
int n = 30;
A instrução printf ( “%d”, ++n<<3>>((n>30)?3:1)); irá retornar:
(A) 30 (B) 31 (C) 120 (D) 121 (E) erro de sintaxe
Vamos à resolução:
Quando nos deparamos com este código, na hora da prova, pensamos: “Nossa, pegadinha!”
Mas não, ela é muito tranquila de ser resolvida.
No momento em que a o programa começa a variável “n” tem o valo 30 e quando entra na condição ela sofre algumas mudanças, pois:
1º – É realizado uma operação de pré-incremento, pois os sinais de “++” estão antes da variável, sendo assim o valor de n, que era 30, passará a ser 31, que em binário é 11111.
2º – Então, é feito um deslocamento à esquerda de três bits, e o número ficará, assim, 11111000, ou seja, o número passará a ser → 248 em decimal.
3º – Uma operação de deslocamento à direita será realizada, mas precisamos saber quantos bits ele deslocará, sendo assim se faz uma operação “SE” que em C é assim:
(n>30)?3:1, lendo seria assim:
“Se n maior que 30, então faça o deslocamento de três bits, senão faça de 1”
Como n = 248, serão deslocados 3 bits à direita e o “n” terá o seu valor 11111 = 31
RESPOSTA → LETRA “B”
ESPERO TER AJUDADO!