Arquivo da categoria: ASSEMBLY & C++

Resolução da Questão 65 de 2011

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!