我知道您可以通过将一个值与 0 进行 AND 运算来进行位掩码。但是,我怎样才能对某些半字节进行位掩码并维护其他字节。换句话说,如果我有 0x000f0b7c 并且我想屏蔽除 b 之外的所有内容(换句话说,我的结果将是 0x00000b00)我将如何使用 AND 来做到这一点?是否需要多个步骤?
如果以二进制形式表示值,则可以更好地理解布尔运算。
如果两个二进制数字的值都为 1,则两个二进制数字之间的 AND 运算返回 1,否则返回 0。
假设您有两个二进制数字a和b,您可以构建以下“真值表”:
| 乙 | 一个和 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。