Dúvida com ">>>" Operador Shift

0 respostas
tengan

Olá pessoal, estou tendo dificuldades para compreender o operador >>> com números negativos.

É o seguinte, estou passando um algoritmo em Java para o .Net, porém o .Net não possui o operador >>> e preciso dele. Consegui fazer um algoritmo no .Net para mover os bits.

o Algoritmo em .Net gera um número diferente que o Java me retorna.

o caso é o seguinte tento deslocar 28 bits no número -[telefone removido], ou seja: -[telefone removido] >>> 28

no Java isso retorna 11 e no Algoritmo retorna 13

qual a idéia do operador >>> ??
Deslocarei os bits de um binário para a direita e completarei com zeros.

a representação de -[telefone removido] em binário é:
1101 0000 0000 0000 0000 0000 0000 0000

o primeiro 1 à esquerda representa que o número é negativo.

a representação de [telefone removido] em binário é:
0101 0000 0000 0000 0000 0000 0000 0000

ao fazer o deslocamento no nosso número -[telefone removido] moveremos o número binário 28 casas para a direita

1101 0000 0000 0000 0000 0000 0000 0000
-[telefone removido] >>> 28
0000 0000 0000 0000 0000 0000 0000 1101

ou seja: 1101 -> 13

o binário que o Java gera:
0000 0000 0000 0000 0000 0000 0000 1011

ou seja: 1011 -> 11

o que ele fez foi deslocar o binário os 28 casas para a direita
0000 0000 0000 0000 0000 0000 0000 1101

depois entre o número 1 que representava o número negativo e o último número 1 à direita, ele inverteu os valores o que era 0 foi para 1 e vice-versa.

0000 0000 0000 0000 0000 0000 0000 1101

0000 0000 0000 0000 0000 0000 0000 1011

Alguém sabe por que ele está fazendo isso?

Qual é a lógica real do operador >>>??

Criado 2 de setembro de 2009
Respostas 0
Participantes 1