Articles of bit manipulação

Por que o XOR é a maneira padrão de combinar hashes?

Digamos que você tenha dois hashes H(A) e H(B) e queira combiná-los. Eu li que uma boa maneira de combinar dois hashes é com XOR , por exemplo, XOR( H(A), H(B) ) . A melhor explicação que encontrei é brevemente abordada aqui sobre estas diretrizes de function hash : XORing dois números com distribuição aproximadamente […]

Está mudando bits mais rápido do que multiplicando e dividindo em Java? .LÍQUIDO?

Deslocar os bits para a esquerda e para a direita aparentemente é mais rápido do que as operações de multiplicação e divisão na maioria, talvez até em todos, CPUs se você estiver usando uma potência de 2. No entanto, pode reduzir a clareza do código para alguns leitores e alguns algoritmos. A mudança de bit […]

Os operadores de deslocamento (<>) são aritméticos ou lógicos em C?

Em C, os operadores de deslocamento ( << , >> ) são aritméticos ou lógicos?

Posição do bit menos significativo que está definido

Eu estou procurando uma maneira eficiente para determinar a posição do bit menos significativo que é definido em um inteiro, por exemplo, para 0x0FF0 seria 4. Uma implementação trivial é esta: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } […]

Algoritmo mais eficiente para reversão de bits (de MSB-> LSB para LSB-> MSB) em C

Qual é o melhor algoritmo para alcançar o seguinte: 0010 0000 => 0000 0100 A conversão é de MSB-> LSB para LSB-> MSB. Todos os bits devem ser invertidos; isto é, isso não é troca de endianness.

Qual é a maneira mais rápida / eficiente de encontrar o bit de conjunto mais alto (msb) em um inteiro em C?

Se eu tiver algum inteiro n, e eu quero saber a posição do bit mais significativo (isto é, se o bit menos significativo estiver à direita, quero saber a posição do bit mais à esquerda que é um 1), Qual é o método mais rápido / eficiente de descobrir? Eu sei que o POSIX suporta […]

O que são operadores de mudança bit a bit (bit shift) e como eles funcionam?

Eu tenho tentado aprender C no meu tempo livre, e outras linguagens (C #, Java, etc.) têm o mesmo conceito (e muitas vezes os mesmos operadores) … O que eu estou querendo saber é, em um nível central, o que a mudança de bits (<>, >>>) faz, quais problemas podem ajudar a resolver, e que […]

Como contar o número de bits definidos em um inteiro de 32 bits?

8 bits representando o número 7 se parecem com isto: 00000111 Três bits estão definidos. O que são algoritmos para determinar o número de bits definidos em um inteiro de 32 bits?