Substituindo um alcance de bits
-
03-07-2019 - |
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.)?
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.