Articles of manipulação de bits

Maneira mais rápida de fixar um valor real (fixo / ponto flutuante)?

Existe uma maneira mais eficiente de fixar números reais do que usar instruções if ou operadores ternários? Eu quero fazer isso para duplas e para uma implementação de 32-bit fixpoint (16.16). Eu não estou pedindo código que possa lidar com ambos os casos; eles serão tratados em funções separadas. Obviamente, posso fazer algo como: double […]

C / C ++ verificar se um bit está definido, ou seja, int variável

int temp = 0x5E; // in binary 0b1011110. Existe uma maneira de verificar se o bit 3 em temp é 1 ou 0 sem bit shift e masking. Só quero saber se há alguma function embutida para isso, ou sou forçada a escrever uma.

Manipulação de Bitfield em C

O problema clássico de testar e configurar bits individuais em um inteiro em C é talvez uma das habilidades de programação de nível intermediário mais comuns. Você define e testa com bitmasks simples, como unsigned int mask = 1<<11; if (value & mask) {….} // Test for the bit value |= mask; // set the […]

Brincadeira de bits: qual bit está definido?

Eu tenho um inteiro não assinado de 64 bits com exatamente 1 bit definido. Eu gostaria de atribuir um valor para cada um dos 64 valores possíveis (neste caso, os primos ímpares, então 0x1 corresponde a 3, 0x2 corresponde a 5, …, 0x8000000000000000 corresponde a 313). Parece que a melhor maneira seria converter 1 -> […]

Dado um número inteiro, como encontro a segunda maior potência de dois usando bit-twiddling?

Se eu tiver um número inteiro n , como posso encontrar o próximo número k > n tal que k = 2^i , com algum elemento i de N por desvio de bit a bit ou lógica. Exemplo: Se eu tiver n = 123 , como posso encontrar k = 128 , que é uma […]

Como funciona a troca de variables ​​XOR?

Alguém pode me explicar como XOR troca de duas variables ​​sem variável temporária funciona? void xorSwap (int *x, int *y) { if (x != y) { *x ^= *y; *y ^= *x; *x ^= *y; } } Eu entendo o que isso faz, mas alguém pode me guiar pela lógica de como funciona?

O que é CHAR_BIT?

Citando o código para calcular o valor absoluto inteiro (abs) sem ramificar a partir de http://graphics.stanford.edu/~seander/bithacks.html : int v; // we want to find the absolute value of v unsigned int r; // the result goes here int const mask = v >> sizeof(int) * CHAR_BIT – 1; r = (v + mask) ^ mask; […]

Operações bitwise mais comuns do C # em enums

Para a vida de mim, não me lembro como definir, excluir, alternar ou testar um pouco em um campo de bits. Ou eu não tenho certeza ou eu os misturo porque eu raramente preciso disso. Então, uma “folha de fraude” seria legal de se ter. Por exemplo: flags = flags | FlagsEnum.Bit4; // Set bit […]

Bit-shift aritmético em um inteiro assinado

Eu estou tentando descobrir como exatamente operadores de deslocamento de bit aritméticos trabalham em C e como isso afetará números inteiros de 32 bits assinados. Para simplificar, digamos que trabalhemos dentro de um byte (8 bits): x = 1101.0101 MSB[ 1101.0101 ]LSB Lendo outras postagens no Stack Overflow e em alguns sites, descobri que: << […]

O que é o complemento 2?

Eu estou em um curso de sistemas de computadores e tenho lutado , em parte, com o Two’s Complement . Eu quero entender, mas tudo que eu li não trouxe a foto para mim. Eu li o artigo da wikipedia e vários outros artigos, incluindo o meu livro de texto . Assim, eu queria começar […]