Pergunta

Algo que qualquer segundo ano em CS deve ser capaz de responder, mas não consigo entender minha cabeça ...

Eu tenho um conjunto de bits e preciso substituir alguns dos bits por um conjunto diferente. Em um exemplo simplificado:

10101010 -Conjunto de bits originais

00001111 -Mask mostrando posições de substituição

00001100 -Valores de bits

10101100 -Conjunto de bits resultante

Outro exemplo:

10101010 -Conjunto de bits originais

00110011 -Mask

11111111 -valores de bits

10111011 -Conjunto de bits resultante

É trivial fazer isso iterando os bits.

É possível fazer isso usando a lógica booleana (e, ou etc.)?

Foi útil?

Solução

result = (original & ~mask) | (newbits & mask)

A parte "& ~ máscara" certifique -se de limpar esses bits para 0 antes do | papel.

A parte "& máscara" verifique se apenas os bits adequados em novatos são usados.

Outras dicas

(Novo e máscara) ou (antigo e não máscara)

Máscara os bits a serem substituídos do original (andando com a máscara não da máscara) e coloque os novos bits (via ou).

10101010 -Conjunto de bits originais

00001111 -Mask mostrando posições de substituição

00001100 -Valores de bits

11110000 -Máscara com base

10100000 -Bitset original mascarado

10101100 -Notes Bits colocados de volta


No código C (++), seria:

out = (in & ~ máscara) | novatos;

Se os novatos contêm bits fora do que deveriam substituir, e eles também pela máscara.

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