Articles of bit manipulação

Explique esse trecho que encontra o máximo de dois inteiros sem usar o if-else ou qualquer outro operador de comparação?

Encontre o máximo de dois números. Você não deve usar if-else ou qualquer outro operador de comparação. Eu encontrei esta pergunta no boletim on-line, então eu pensei que deveria perguntar no StackOverflow EXEMPLO Entrada: 5, 10 Saída: 10 Eu encontrei esta solução, alguém pode me ajudar a entender essas linhas de código int getMax(int a, […]

Comportamento estranho do operador do turno direito (1 >> 32)

Eu recentemente enfrentei um comportamento estranho usando o operador do turno da direita. O seguinte programa: #include #include #include #include int foo(int a, int b) { return a >> b; } int bar(uint64_t a, int b) { return a >> b; } int main(int argc, char** argv) { std::cout << "foo(1, 32): " << foo(1, […]

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