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