555 字
3 分钟
CSAPP_布尔代数
布尔代数的运算
- 与 & :当A=1且B=1时,A&B=1
- 或 | :当A=1或B=1时,A|B=1
- 非~:~A=1当A=0
- 异或^:当A=1或B=1且两者不同时为1时,A^B=1
位向量操作
在编程中,布尔代数的运算通常应用于位向量(bit vector),即一组二进制位的集合。常见的位向量操作包括:
-
按位与(bitwise AND):对两个位向量的对应位进行与操作。
-
按位或(bitwise OR):对两个位向量的对应位进行或操作。
-
按位非(bitwise NOT):对一个位向量的每一位进行取反操作。
-
按位异或(bitwise XOR):对两个位向量的对应位进行异或操作。
在c语言中,这些操作符分别是&,|,~,^。
比较常见的应用是掩膜(masking),通过与操作可以选择性地保留或清除某些位。
掩膜
掩膜是一种位向量,用于选择性地保留或清除数据中的某些位。通过与操作,可以实现对特定位的操作。
筛选掩膜
筛选掩膜用于保留数据中的特定位,将其他位清零。操作符是与&,1表示保留该位,0表示清除该位。
例如,假设有一个8位的数据10101100,我们想保留高4位,清除低4位,可以使用掩膜11110000进行与操作:
uint8_t data = 0b10101100; // 原始数据uint8_t mask = 0b11110000; // 掩膜uint8_t result = data & mask; // 结果为0b10100000设置掩膜
设置掩膜用于将数据中的特定位设置为1,而不改变其他位。操作符是或|,1表示设置该位为1,0表示保持原位不变。
例如,假设有一个8位的数据10100000,我们想将低4位设置为1,可以使用掩膜00001111进行或操作:
uint8_t data = 0b10100000; // 原始数据uint8_t mask = 0b00001111; // 掩膜uint8_t result = data | mask; // 结果为0b10101111当然,掩膜的应用远不止这些,布尔代数的运算在计算机科学中有着广泛的应用,包括权限管理、数据压缩、加密等领域。
有时候需要组合使用多种掩膜操作来实现复杂的数据处理任务。