Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
Surgiu uma dúvida quanto ao operador bit complementar (~). Testei o exemplo, fazendo:
O valor de x é 2, beleza. Para achar o y, não devo fazer: 0010 e inverter os bits? Ficaria: 1101. O resultado seria igual a 13 seguindo essa idéia, mas o compilador informa que a variável y vale -3! Isso não ficou claro pra mim, alguma coisa que não me liguei?
x = 2, bit: 10 y = -3, bit: 11111111111111111111111111111101
Cara na boa... -3 não é representado por este número não! Entendi que o complemento também realiza a troca para o sinal do número. Então, se o 2 é representado por 10, fazendo o complemento fica 01. Como o sinal DEVE ser trocado, então o 1º bit (que representa o sinal do número) deve ser trocado. Então, fica: 11, representado por -3.
*editado* Vi que os bits TODOS são realmente trocados, mas como o número 2 é representado por apenas 2 bits, então todos esses 1´s antes do 01 são ignorados. Vale trocar o 1º zero por 1 para definir o sinal que deve ser diferente.
_________________ JavaFree.org
Atribuições elementares não precisam ser discutidas, pois você já deve está familiarizado, agora um regrinha deve ser lembrada para sempre: toda atribuição que é resultada de uma operação (seja ela qual for: soma, divisão, deslocamento de bits....) envolvendo tipos inteiros (byte, short, int, long) SEMPRE RESULTARÁ EM UM TIPO INT !!!
Portanto:
byte x = 1; // ok byte y = 2 + 3; // ok byte z = x + y; // deveria aceitar pois 6 cabe perfeitamente em um tipo byte, porém é necessário uma converão explícita byte z = (byte)x + y; // agora sim
A última linha não funciona assim, porque o casting tem que ser do resultado da operação, e nesse caso o casting está funcionando apenas para o identificador x. Eu consegui aqui fazendo da seguinte forma (só a ultima linha)
_________________
Michel Dambros Figueiredo Analista J2EE / Consultor SAP NetWeaver micheldf@gmail.com SAP Certified Consultant NetWeaver 04 - Web Application Development - Focus JAVA SCWCD Sun Certified Web Component Developer SCJP Sun Certified Programmer for the Java 2 Platform
Anunciante
kuesley Offline
Posts: 781
Esta página exibe apenas os comentários deste tutorial, para ler o artigo, clique aqui.
bonoddr Offline
Posts: 78
Surgiu uma dúvida quanto ao operador bit complementar (~). Testei o exemplo, fazendo:
O valor de x é 2, beleza. Para achar o y, não devo fazer: 0010 e inverter os bits? Ficaria: 1101. O resultado seria igual a 13 seguindo essa idéia, mas o compilador informa que a variável y vale -3! Isso não ficou claro pra mim, alguma coisa que não me liguei?
Valeu aí galera 8)
_________________
JavaFree.org
lap_junior Offline
Posts: 914
Isto ocorre por o operador inverte todos os bit do numero, lembre-se que int tem 32 bit, então:
Resultado:
flw
_________________
JavaFree.org
Blog
bonoddr Offline
Posts: 78
Cara na boa... -3 não é representado por este número não! Entendi que o complemento também realiza a troca para o sinal do número. Então, se o 2 é representado por 10, fazendo o complemento fica 01. Como o sinal DEVE ser trocado, então o 1º bit (que representa o sinal do número) deve ser trocado. Então, fica: 11, representado por -3.
*editado* Vi que os bits TODOS são realmente trocados, mas como o número 2 é representado por apenas 2 bits, então todos esses 1´s antes do 01 são ignorados. Vale trocar o 1º zero por 1 para definir o sinal que deve ser diferente.
_________________
JavaFree.org
micheldf Offline
Posts: 256
No item:
A última linha não funciona assim, porque o casting tem que ser do resultado da operação, e nesse caso o casting está funcionando apenas para o identificador x.
Eu consegui aqui fazendo da seguinte forma (só a ultima linha)
_________________
Michel Dambros Figueiredo
Analista J2EE / Consultor SAP NetWeaver
micheldf@gmail.com
SAP Certified Consultant NetWeaver 04 - Web Application Development - Focus JAVA
SCWCD Sun Certified Web Component Developer
SCJP Sun Certified Programmer for the Java 2 Platform
Gaguin Offline
Posts: 1
A forma mais fácil de resolver isso é utilizando a seguinte formula:
(-x)-1
no caso
x = 2
(-2)-1 = -3
Fácil ou simples?
Relacionados
Reunião do grupo de estudos SCJP - 30/10/04 http://javafree.uol.com.br/topic-12151-Reuniao-do-grupo-de-estudos-SCJP-30-10-04.html (Piece of cake) - Para iniciantes http://javafree.uol.com.br/topic-4354-Piece-of-cake-Para-iniciantes.html Os operadores <<, >> e >>> http://javafree.uol.com.br/topic-10973-Os-operadores-<<->>-e->>>.html indicação de livro http://javafree.uol.com.br/topic-874940-indicacao-de-livro.html como funciona sincronized ??? http://javafree.uol.com.br/topic-852248-como-funciona-sincronized.html [DUVIDA] funcao pósfixa http://javafree.uol.com.br/topic-875211-DUVIDA-funcao-posfixa.html Como imprimir o menor e o maior número? http://javafree.uol.com.br/topic-856063-Como-imprimir-o-menor-e-o-maior-numero.html Operadores no JavaFX http://javafree.uol.com.br/topic-874750-Operadores-no-JavaFX.html Reunião do grupo de estudos SCJP - 11/12/2004 http://javafree.uol.com.br/topic-13644-Reuniao-do-grupo-de-estudos-SCJP-11-12-2004.html
Anunciante