Duvida sobre o operador de inversao de bits ~  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
duardor
Virtual Machine Man
[Avatar]

Membro desde: 04/12/2002 16:26:48
Mensagens: 552
Localização: BRAZIL
Offline

Ae galera
To com uma duvida...
seguinte
como age o operador de inversao de bits?
Por exemplo:
seja o numero 1 em binario (pra simplificar colocamos um byte)
10000001

Sendo que o digito mais significante eh o digito de sinal e assumindo que 1 eh positivo

se eu aplicar o operador de inversao de bit ficaria

01111110

ou seja algum numero negativo muito grande

mas ao fazer isso em um programa com esse codigo:



ele imprime -2...
nao entendi... alguem pode me explicar?

Eduardo Rodrigues
Belo Horizonte - MG
[Email] [MSN] [ICQ]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5983
Localização: São Paulo
Offline

A representacao binaria de "1" eh "01". Ao inverter os bits, fica "10", que eh "2" positivo. Porem, como o sinal eh trocado, todos os outros bits mais a esquerda, que antes eram "0", viram "1", tornando o numero negativo.



Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
duardor
Virtual Machine Man
[Avatar]

Membro desde: 04/12/2002 16:26:48
Mensagens: 552
Localização: BRAZIL
Offline

entao ele nao vai inverter os bits 0 que estao mais a esquerda, com excecao do bit indicador de sinal???
eh isso?

Eduardo Rodrigues
Belo Horizonte - MG
[Email] [MSN] [ICQ]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5983
Localização: São Paulo
Offline

Ele inverte todos os bits.. "mais a esquerda" significa todos eles, nao somente um. Execute o programa para voce ver.

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
duardor
Virtual Machine Man
[Avatar]

Membro desde: 04/12/2002 16:26:48
Mensagens: 552
Localização: BRAZIL
Offline

Rafael Steil wrote:Ele inverte todos os bits.. "mais a esquerda" significa todos eles, nao somente um. Execute o programa para voce ver.

Rafael

Mas rafael como eu disse:
Se sao todos bits entao
um byte tem 8 bits sendo q o de ordem mais alta eh o digito de sinal:
entao digamos 1 se o bit de ordem mais alta for 1 entao eh positivo
o numero "1" seria:
10000001
aplicando ~
01111110
q eh -2^21 =
-2097152

maos ao inves disso ele dah:
00000010 q eh o -2
os bits em amarelo
00000010 nao foram invertidos...
entao os bits que estao entre o bit de sinal e o primeiro bit 1 nao sao invertidos...
to errado?
agradeço sua ajuda



Eduardo Rodrigues
Belo Horizonte - MG
[Email] [MSN] [ICQ]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5983
Localização: São Paulo
Offline

Nao, nao.. "1" eh negativo, "0" eh positivo. Voce esta confundindo. Depois, a operacao de inversao eh feita como se fosse um int neste caso, tanto que voce precisa do cast para byte para fazer a atribuicao de novo.. entao, na verdade, voce esta trabalhando com um numero de 32 bits ( mas nao que isso interfira no resultado neste caso ).

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
duardor
Virtual Machine Man
[Avatar]

Membro desde: 04/12/2002 16:26:48
Mensagens: 552
Localização: BRAZIL
Offline

Eu nao to preocupado com o bit de sinal
To sim preocupado com os bits entre o bit de sinal e o primeiro 1 no valor original...
Tipo digamos entao que um inteiro tenha 4 bits(pra simplificar) e o bit de sinal eh + ou -
Entao 1 :
+001
Aplicando ~
-110
Que na verdade eh igual -5
entendeu???
se inverter todos os bits teria q funcionar assim...
me exoplica isso ai direito, como funciona nos bits...
valew
[/b]

Eduardo Rodrigues
Belo Horizonte - MG
[Email] [MSN] [ICQ]
mlopes
JavaTeenager
[Avatar]

Membro desde: 18/11/2002 11:01:01
Mensagens: 163
Localização: Alemanha
Offline

Ola,

O 110 na verdade é -2. O java trabalha com complento de dois!!! (byte, short, int e long).

[]'s

Marco Lopes

----------------------------------------------------------
Pássaro que cedo madruga....
... porém o segundo rato é quem pega o queijo
----------------------------------------------------------
[Yahoo!] [MSN]
duardor
Virtual Machine Man
[Avatar]

Membro desde: 04/12/2002 16:26:48
Mensagens: 552
Localização: BRAZIL
Offline

Putz
Complemento de 2...
Eu vi isso no primeiro periodo da facu e depois nunca mais...
Como eh mesmo a teoria?

Eduardo Rodrigues
Belo Horizonte - MG
[Email] [MSN] [ICQ]
mlopes
JavaTeenager
[Avatar]

Membro desde: 18/11/2002 11:01:01
Mensagens: 163
Localização: Alemanha
Offline

Ola

Na prática:

~i = -(i + 1)

O google acha bastante literatura sobre o assunto.

[]'s

Marco Lopes

----------------------------------------------------------
Pássaro que cedo madruga....
... porém o segundo rato é quem pega o queijo
----------------------------------------------------------
[Yahoo!] [MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team