位级运算的一个常见用法是实现掩码运算。
这里掩码运算是一个位模式,表示从一个字中选出的位的集合。让我们来看一个例子:
掩码 0xFF(最低的 8 位为 1 )表示一个字的低位字节。位级运算 x & 0xFF 生成一个由 x 的最低有效字节组成的值,而其他的字节就被置为 0。
比如,对于 x = 0x89ABCDEF,其表达式将得到 0x000000EF。表达式 ~0 将生成一个全 1 的掩码,不管机器的 字长大小是多少。尽管对于一个 32 位机器来说,同样的掩码可以写成 0xFFFFFFFF,但是这样的代码不是可移植的。
我们再看几个有趣的例子。
- 求出x 的最低有效字节,其他位均置为 0。
x & 0xFF
- 除了 x 的最低有效字节外,其他的位都取补,最低有效字节保持不变。
x ^ (~0xFF)
- x 的最低有效字节设置成全 1,其他字节都保持不变。
x | 0xFF
上述表达式对于任何字长 w >= 8 都能工作,其中第 2 个表达式中 ~0xFF 创建一个掩码,该掩码 8 个最低位等于 0,而其余的位为 1。