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

qwe*_*683 2 logic bitmask

我知道您可以通过将一个值与 0 进行 AND 运算来进行位掩码。但是,我怎样才能对某些半字节进行位掩码并维护其他字节。换句话说,如果我有 0x000f0b7c 并且我想屏蔽除 b 之外的所有内容(换句话说,我的结果将是 0x00000b00)我将如何使用 AND 来做到这一点?是否需要多个步骤?

Dis*_*sti 6

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

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

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

  | 乙 | 一个和 b
 ---+---+---------
  0 | 0 | 0
  1 | 0 | 0
  0 | 1 | 0
  1 | 1 | 1

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

给定的值 0xf0b7c 可以转换如下:

f 0 b 7 c(十六进制)
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。