Bom estou com dúvida a respeito do operador de troca de bits.
É o seguinte as operações de troca de bits são aplicada as int, certo ?
int a=1;
System.out.println(~a);
Me respondam o seguinte como a VM chegou ao valor -2 ?
Sabemos que o valor 1(decimal) no valor binário é 1. Quantos bits ele pega para fazer a conversão ?
em binário considerando os 32 bits o 1 é :
00000000000000000000000000000001
para fazer a conversão ele usa todos os bits ? Ficando
11111111111111111111111111111110. Como é que este número pode ser -2 ?
Na prova eu tenho que usar quantos bits para fazer a conversão.
por exemplo eu teria que representar o 1 assim : 001 e fazer a conversão destes 3 bits ?
ficando 110 e o bit mais significativo é o do sinal ?
Por exemplo 5 = 0101 e ~5= ? Como seria sua representação em Bin ?
Estude “complemento de 2” (se não achar isso em português, tente “two’s complement”) para entender porque é que -2 é representado (quando usamos um int de 32 bits) por 11111111111111111111111111111110.
(De fato, se você interpretasse o número acima como um inteiro sem sinal, obteria o valor em decimal 4294967294, como pode ser comprovao usando a calculadora do Windows em modo científico).
Bom raphael eh o seguinte o operador ~ (complemento) serve para inverter os bits - isso eu percebi que vc jah sacoW-Respondendo as seus perguntas
1- Como saber que o número em binário a seguir eh -2 ?
bom pra descobrir o valor de um número binário negativo vc deve inverter os bits
1111 1111 1111 1111 1111 1111 1111 1110 - primeira representação
após a inversão dos bits vc deve somar 1 resultado:
0000 0000 0000 0000 0000 0000 0000 0010
pronto obteve o dois positivo, depois eh soh aplicar o sinal.
OBS: lembrando que o primeiro 1 se tornou 0 pq um e um somando vc obtem 0.
2- Na prova eu tenho que usar quantos bits para fazer a conversão ?
Sempre faça a conversão usando os 32 bits no caso de inteiros, 16 se for short e 8 se for bit (sempre atento ao ultimo bit da esquerda que eh o bit de sinal).
bom agora aplicando a mesma metodologia da primeira resposta pra esclarecer sua ultima duvida…vamos lah
agora para descobrir o que significa o número binario obtido acima:
-primeiro invertemos os bits-
era assim: 1111 1111 1111 1111 1111 1111 1111 1010
fica assim: 0000 0000 0000 0000 0000 0000 0000 0101
depois adicionamos 1 e obtemos 6 positivo em binario:
0000 0000 0000 0000 0000 0000 0000 0110
por ultimo aplicamos o sinal. pronto o -6 tão cobiçado…
espero que tenho ajudado…qualquer duvida pode perguntar raphael…
abraço
Eh isso mesmo!!! Eh tudo questão de inverter os bits e quando o bit da extrema esquerda for 1 significa que o número será negativo então devemos aplicar a conversão (aquela vista acima).
:mrgreen: :mrgreen:
Para quem vai fazer a prova, encontrei uma dica bem legal na especificação:
At run time, the value of the unary logical complement expression is true if the operand value is false and false if the operand value is true.[c
Onde:
~5 = (-5)-1 = -6
~(-4)=-(-4)-1= 3
Para quem vai fazer a prova, encontrei uma dica bem legal na especificação:
At run time, the value of the unary logical complement expression is true if the operand value is false and false if the operand value is true.[c
Onde:
~5 = (-5)-1 = -6
~(-4)=-(-4)-1= 3
[/quote]
Muito interessante Angela. É uma dica muito valiosa mesmo pra quem vai fazer o exame! :thumbup: