2016-01-26 3 views
1

Я знаю, что вы можете битмаскировать с помощью ANDing значение с 0. Однако, как я могу бить маску определенных nibbles и поддерживать другие. Другими словами, если у меня есть 0x000f0b7c, и я хотел замаскировать все, кроме b (другими словами, мой результат будет 0x00000b00), как бы я использовал AND для этого? Это потребует нескольких шагов?Как битмаскировать число (в шестнадцатеричном формате) с помощью оператора И?

ответ

3

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

операции И между двумя двоичными цифрами возвращает 1, если оба двоичных разрядов имеют значение 1, в противном случае она возвращает 0.

Предположим, у вас есть два двоичных цифр и б можно построить следующую таблицу истинности «»:

 
    a | b | a AND b 
---+---+--------- 
    0 | 0 | 0 
    1 | 0 | 0 
    0 | 1 | 0 
    1 | 1 | 1 

операция маскирования состоит из операции AND заданного значения с «маской», где каждый бит, который нуждается в т o сохраняется в 1, а каждый бит для сброса устанавливается равным 0. Это делается путем ANDing каждого бита данного значения с соответствующим битом маски.

Приведенное значение, 0xf0b7c, можно преобразовать следующим образом:

 
f 0 b 7 c  (hex) 
1111 0000 1011 0111 1100 (bin) 

Если вы хотите сохранить только биты, соответствующие «Ъ» значения (биты 8..11) вы можете замаскировать его это путь:

 
f 0 b 7 c 
1111 0000 1011 0111 1100 
0000 0000 1111 0000 0000 

значение 0000 0000 1111 0000 0000 может быть преобразован в шестнадцатеричный и имеет значение 0xf00.

Так что, если вы вычислите «0xf0b7c И 0xf00», вы получите 0xb00.

+0

Понял! Будет ли это работать в любой ситуации? Другими словами, будет ли ANDing байтом с 0xf всегда поддерживать его? – qwerty5683

+0

Значение 0xf в двоичном выражении равно 1111, или, если вы представляете его в виде байта (8 бит), 00001111. ANDing ** байт ** с 00001111 (0xf) сохранит только 4 младших значащих бита (4 на далеко правее), а если вы и байт с 11111111 (0xff), вы в основном получаете исходный байт. Я рекомендую вам практиковать эти операции с помощью конвертера hex-bin (это может сделать Windows «calc»). – Disti

Смежные вопросы