Pergunta

Eu tenho uma fila e uma série de filas. buckets é a matriz e collector é a fila. pass é um número inteiro que salva qual passagem é.Tenho um método que me retorna o contém da primeira célula da fila chamado peek(). shiftOne() é um método que move o início de uma fila para o final de outra.

Agora esse código não funciona para mim

bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);

Fui passo a passo e descobri que não estou mascarando os bits corretamente.Eu posso mudá-los, mas isso é tudo.Então tentarei acessar o elemento 102 para um array de 10 elementos.O que estou fazendo de errado?Eu sei peek() e shiftOne() porque posso classificar usando potências e módulos.

Foi útil?

Solução

Você está confundindo Radix-10 com Radix-2.

A mudança de bits é a divisão por 2, por exemplo: 102 >> 1 = 102 / 2 = 51.
De forma similar: 102 >> 8 = 102 / 2^8 = 102 / 256 = 0 (em int termos).

O código (i >> 8) & 0xFF por exemplo, é usado para extrair o conteúdo de o segundo byte do dado i valor.

Para o seu caso - opte pelas divisões por 10 com módulo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top