Operador bit a bit  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Puppets
Virtual Machine Man
[Avatar]

Membro desde: 12/12/2006 14:14:55
Mensagens: 508
Localização: Porto Alegre
Offline

Tenho olhado no google mais não encontrei nada convincente sobre como usar operadores bit a bit
achei essa classe como exemplo:



Minhas dúvidas são as seguintes:
Nesta instrução
i = ~b;

O valor de b é 15, porque eu negando o valor ele vai pra -16 ?

d = (a & b);

O valor de a é 10 e o de b é 15, porque d recebe o menor que neste caso é 10 ?

e = (a | b);

Nesta operação já é o contrário recebe o maior entre a e b neste caso é 15 alguém sabe o porque ?


Nunca desista antes de conseguir.
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

Puppets wrote:
i = ~b;

O valor de b é 15, porque eu negando o valor ele vai pra -16 ?
Puppets wrote:
d = (a & b);

O valor de a é 10 e o de b é 15, porque d recebe o menor que neste caso é 10 ?
Puppets wrote:
e = (a | b);

Nesta operação já é o contrário recebe o maior entre a e b neste caso é 15 alguém sabe o porque ?

This message was edited 3 times. Last update was at 15/07/2008 15:31:55


Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
bobmoe
GUJ Ranger
[Avatar]

Membro desde: 11/07/2006 20:45:48
Mensagens: 806
Localização: Sampa
Offline

victorwss wrote:
Puppets wrote:
i = ~b;

O valor de b é 15, porque eu negando o valor ele vai pra -16 ?



... ou

~x == (-x)-1

This message was edited 2 times. Last update was at 15/07/2008 15:39:42


BOB - Roberto Nogueira - bobmoe.blogspot.com
[WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

Ou seja, a melhor maneira de aprender sobre operadores bit a bit é olhar os bits.
Não os valores decimais.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

Para entender pq o negativo de 15 é -16 e não -15, estude sobre complemento de 2.

Na verdade, para que os números negativos e positivos fossem simétricos, deveria haver o número -0 e +0.

Considere que o primeiro bit representa o sinal:
1000 0000 representaria -0 e
0000 0000 representaria +0.

Optou-se então por retirar a forma negativa do 0 e usa-la para representar outro valor. No caso, um número negativo a mais. Por isso é que variáveis como byte vão de -128 até 127, e não -127 até 127.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

ViniGodoy wrote:
Na verdade, para que os números negativos e positivos fossem simétricos, deveria haver o número -0 e +0.

Considere que o primeiro bit representa o sinal:
1000 0000 representaria -0 e
0000 0000 representaria +0.


http://en.wikipedia.org/wiki/Signed_number_representations indica que em alguns computadores antigos (IBM 7090, um predecessor dos mainframes) existia essa representação "sinal + magnitude" - o primeiro bit seria o sinal e o resto seria o valor - mas como ela era mais desajeitada para fazer contas (tradução: gastava mais hardware), foi substituída rapidamente pelo complemento de 2.
Mas os números de ponto flutuante realmente usam sinal + magnitude porque ela é melhor para fazer contas de multiplicação e divisão. O complemento de 2 é mais útil para fazer adições e subtrações.


[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team