Articles of bit manipulação

Computação rápida de log2 para inteiros de 64 bits

Um ótimo recurso de programação, Bit Twiddling Hacks, propõe ( aqui ) o seguinte método para calcular log2 de um inteiro de 32 bits: #define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n static const char LogTable256[256] = { -1, 0, 1, 1, 2, 2, 2, […]

Entendendo o operador E bit a bit

Eu tenho lido sobre operadores bit em Objective-C no livro de Kochan, “Programming in Objective-C”. Estou muito confuso sobre esta parte, embora eu tenha realmente entendido quase tudo o mais que me foi apresentado até agora. Aqui está uma citação do livro: O operador bit a bit AND O ANDing bit a bit é freqüentemente […]

Operadores bitwise e “endianness”

O endianness importa com as operações bitwise? Lógico ou mudando? Eu estou trabalhando no dever de casa com respeito aos operadores bit a bit, e eu não posso fazer cara ou coroa nele, e eu acho que estou ficando bastante preso na endianess. Ou seja, estou usando uma pequena máquina endian (como a maioria é), […]

Extraindo bits com uma única multiplicação

Eu vi uma técnica interessante usada em uma resposta a outra pergunta e gostaria de entender um pouco melhor. Recebemos um inteiro de 64 bits sem sinal e estamos interessados ​​nos seguintes bits: 1…….2…….3…….4…….5…….6…….7…….8……. Especificamente, gostaríamos de movê-los para as oito primeiras posições, assim: 12345678……………………………………………….. Nós não nos importamos com o valor dos bits indicados […]

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 […]