如何使用AND运算符对数字(十六进制)进行位掩码?

时间:2016-01-26 23:42:26

标签: logic bitmask

我知道你可以通过将值与0进行比特来进行位掩码。但是,我怎样才能对某些半字节进行位掩码并保持其他半字节。换句话说,如果我有0x000f0b7c并且我想掩盖除b之外的所有内容(换句话说,我的结果将是0x00000b00),我将如何使用AND来执行此操作?它需要多个步骤吗?

1 个答案:

答案 0 :(得分:3)

如果以二进制形式表示值,则可以更好地理解布尔运算。

如果两个二进制数字的值都为1,则两个二进制数字之间的AND运算返回1,否则返回0.

假设您有两个二进制数字 a b ,您可以构建以下“真值表” :

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

屏蔽操作包括将给定值与“掩码”进行AND运算,其中需要保留的每个位都设置为1,而要丢弃的每个位都设置为0。 这是通过将给定值的每个位与掩码的相应位进行AND运算来完成的。

给定值0xf0b7c可以按如下方式转换:

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

如果你只想保留对应于“b”值(位8..11)的位,你可以这样屏蔽它:

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

值0000 0000 1111 0000 0000可以转换为十六进制,其值为0xf00。

因此,如果计算“0xf0b7c AND 0xf00”,则获得0xb00。