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

标签 logic bitmask

我知道您可以通过将一个值与 0 进行 AND 运算来进行位掩码。但是,我如何既可以对某些半字节进行位掩码又可以保留其他半字节。换句话说,如果我有 0x000f0b7c 并且我想屏蔽除 b 之外的所有内容(换句话说我的结果将是 0x00000b00),我将如何使用 AND 来执行此操作?是否需要多个步骤?

最佳答案

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

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

假设你有两个二进制数字ab,你可以建立如下的“真值表” :

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

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

给定值 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。

关于logic - 如何使用 AND 运算符对数字(十六进制)进行位掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35026171/

相关文章:

c++ - 冒泡排序链表不排序

c - 用于组合信用卡网络的位掩码枚举

c++ - 生成位掩码

java - 创建具有大量选项的位掩码

database - DB 中位掩码的替代设计

logic - 转换为 XOR 合取形式

java - Struts 逻辑 :iterate input field

python - 表示蜂窝格子的最佳方式是什么?

ios - 如何在 Swift 中为 SpriteKit 定义类别位掩码枚举?

javascript - (this) 在这段代码中如何工作,javascript?