SóProvas


ID
2367259
Banca
FGV
Órgão
ALERJ
Ano
2017
Provas
Disciplina
Programação
Assuntos

Operadores bit-a-bit permitem a avaliação e a modificação de bits específicos em determinados tipos de dados na linguagem Java.

Das expressões a seguir, a que resulta em um valor positivo para variável x é:

Alternativas
Comentários
  • As variáveis int e long possuem uma capacidade de armazenar 32 bits e 64 bits respectivamente.

    >>> descolamento de bits para a direita SEM SINAL

    >>  deslocamento de bits para a direita COM SINAL

    << deslocamento de bit a esquerda (A questão nao cobra, porém coloquei para agregar conhecimento)

    A questão pede um valor positivo para a variável X. Podemos eliminar as letras D e E pois ela se refere ao deslocamento de bit com sinal e como o valor de X é -1 o resultado será negativo.

    Para as opções A, B e C, devemos considerar o valor de X como +1 (um positivo), pois o sinal de deslocamento determina a não utilização de sinal.

    Na opção A, pede-se para deslocar 64 bits e armazenar em uma variável do tipo long cuja capacitade é 64 bits

    Na opção B, pede-se para deslocar 32 bits e armazenar em uma variável do tipo int cuja capacitade é 32 bits

    Acredito que iria dar erro de over flow pois as atribuições da questão A e B não comportaria pois faltaria o bit para representar o sinal.

    Na opção C, pede-se para deslocar 16 bits e armazenar em uma variável do tipo int cuja capacidade é 32 bits. Por isso marquei a opção C, sendo o gabarito da questão.

     

     

  • Para ter um numero positivo a partir de um número negativo (x= -1) só poderia usar operadores de deslocamento SEM sinal (>>>). Os COM sinal vão manter o sinal e então manter negativo.

    Ficamos só com as opções A), B) e C). Nas opcoes A) e B) ele desloca todos os bits do tamanho da variavel para a direita, e como é sem sinal se preenche com zeros, restando o numero zero, que não é um número positivo. Entao só sobra a letra C.

               x=1 =>   00000000000000000000000000000001

    inverte os bits=> 11111111111111111111111111111110

     soma 1 =>                                                    + 1

    ___________________________________________

              x= -1=>   11111111111111111111111111111111

    C) int X= -1; x=x>>>16    00000000000000001111111111111111

    desloco 16 bits para direita e, como é SEM sinal, preencho com zeros. Na saída os zeros não serao mostrados, só didaticamente aparecem. Como o bit mais significativo é 0, o número é positivo.

    Por favor,corrijam se estiver errado.

     

  • Quem não tem acesso:  - -> C