SóProvas


ID
800758
Banca
Exército
Órgão
EsFCEx
Ano
2011
Provas
Disciplina
Programação
Assuntos

Considere a seguinte declaração em linguagem C:
int n = 30;

A instrução printf ( "%d", ++n<<3>>((n>30)?3:1)); irá retornar:

Alternativas
Comentários
  • Basta rodar o codigo abaixo:
    #include
    int main()
    {
        printf ( "%d", ++n<>((n>30)?3:1));
        return 0;
    }

    Resposta: 31

  • Vamos analisar a questão:

    int n = 30; // n é declarado como um inteiro de valor 30;


    ++n << 3 >> ( ( n > 30 ) ? 3 : 1 ) )  ==> n é incrementado em 1 valor ficando com 31;


    ++n << 3 >> ( ( n > 30 ) ? 3 : 1 ) )  ==> em n é executado a operação de carry (deslocamento de 3 posições para esquerda);

     

    ++n << 3 >> ( ( n > 30 ) ? 3 : 1 ) )  ==> é executado um operador ternário, se n for maior que 30, então n recebe o valor de 3, caso contrário, recebe o valor de 1; // Como n é igual a 31, recebe o valor de 3;

     

    ++n << 3 >> 3  ==> em n é executado a operação de carry (deslocamento de 3 posições para direita), pois foi o resultado do operador ternário no passo anterior;

     

    por fim, é impresso o valor de n que é igual a 31;

     

     

    O processo do carry:

    valor 31 em binário, representado com 8 bits:

    0 0 0 1 1 1 1 1

    1 1 1 1 1 0 0 0 ( << 3 ) deslocamento 3 posições esquerda

    0 0 0 1 1 1 1 1 ( >> 3 ) deslocamento 3 posições direita;