Разъяснение по битам для маскировки - PullRequest
1 голос
/ 12 февраля 2010

У меня быстрый вопрос по поводу маскировки битов. Если я хочу включить два 8-битных потока, могу ли я

использовать логику AND против двух:

     10101010
AND  01101001
     ________
     00101000

или я действительно изменяю один из битов в потоке, чтобы включить эти биты? Я предполагаю, что мой вопрос: когда я включаю (используя AND) или выключаю (используя OR), действительно ли я изменяю какие-либо биты, или просто сравниваю два с использованием логики AND/OR?

Ответы [ 3 ]

1 голос
/ 16 мая 2011

Чтобы включить (1), вы должны использовать оператор ИЛИ с 1 в позиции, которую вы хотите включить, потому что независимо от того, что является исходным значением в потоке, результат будет ВКЛ

   00000000 // whatever the values in the input
OR 00000001 // 'OR' turns on the last position in the stream
   --------- 
   00000001

Чтобы выключить (0), вы должны использовать оператор AND с 0 в позиции, которую вы хотите выключить, потому что независимо от того, какое исходное значение во входном потоке, результат будет OFF.

    11111111 // whatever the values here
AND 11111110 // turns off the last position in the stream
    ---------
    11111110
0 голосов
/ 12 февраля 2010

Я не уверен, что вы подразумеваете под «потоками» в данном случае.

В большинстве языков вам нужно иметь как назначение, так и двоичную операцию.

То есть вы бы обычно имели что-то вроде

foo = get_byte() // Call some function to get the original value of foo
foo = foo AND 11110111 // Replace foo with the result of the AND, which
                       // in this case will turn off the 4th bit, and leave
                       // the other bits unchanged

Последняя строка заменяет содержимое foo результатами бинарной операции

0 голосов
/ 12 февраля 2010

Другие, поправьте меня, если я ошибаюсь:

Чтобы включить 4-й бит в 8-битном потоке, вы должны сравнить 8-битный поток, используя логику OR, используя 00001000.

Чтобы отключить 4-й бит в 8-битном потоке, вы должны сравнить 8-битный поток, используя логику AND, используя 11110111.

Для переключения бита вы должны использовать 11111111 с помощью логики XOR.

...