设为首页 加入收藏

TOP

E.1.4 几种常用的按位运算符技术
2013-10-07 15:47:22 来源: 作者: 【 】 浏览:70
Tags:E.1.4 常用 运算 技术

E.1.4  几种常用的按位运算符技术

控制硬件时,常涉及打开/关闭特定的位或查看它们的状态。按位运算符提供了执行这种操作的途径。下面简要地介绍一下这些方法。

在下面的示例中,lottabits表示一个值,bit表示特定位的值。位从右到左进行编号,从0开始,因此,第n位的值为2n。例如,只有第3位为1的整数的值为23(8)。一般来说,正如附录A介绍的,各个位都对应于2的幂。因此我们使用术语位(bit)表示2的幂;这对应于特定位为1,其他所有位都为0的情况。

1.打开位

下面两项操作打开lottabits中对应于bit表示的位:

 

它们都将对应的位设置为1,而不管这一位以前的值是多少。这是因为对1和1或者0和1执行OR操作时,都将得到1。lottabits中其他所有位都保持不变,这是因为对0和0做OR操作将得到0,对1和0做OR操作将生成1。

2.切换位

下面两项操作切换lottabits中对应于bit表示的位。也就是说,如果位是关闭的,则将被打开;如果位是打开的,将被关闭:

 

对0和1执行XOR操作的结果为1,因此将关闭已打开的位;对1和1执行XOR操作的结果为0,因此将打开已关闭的位。lottabits中其他所有位都保持不变,这是因为对0和0执行XOR操作的结果为0,对1和0执行XOR操作的结果为1。

3.关闭位

下面的操作将关闭lottabits中对应于bit表示的位:

 

该语句关闭相应的位,而不管它以前的状态如何。首先,运算符~bit将原来为1的位设置为0,原来为0的位设置为1。对0和任意值执行AND操作都将得到0,因此关闭相应的位。lottabits中其他所有位都保持不变,这是因为对1和任意值执行AND操作时,该位的值将保持不变。

下面是一种更简洁的方法:

 

4.测试位的值

如果要确定lottabits中对应于bit的位是否为1,则下面的测试不一定管用:

 
这是因为即使lottabits中对应的位为1,而其他位也可能为1。仅当对应的位为1,而其他位皆为0时,上述等式才为true。因此修补的方式是,首先对lottabits和bit执行AND操作,这样生成的值的对应位保持不变,因为对1和任何值执行AND操作都将保持该值不变;而其他位都为0,因为对0和任何值执行AND操作的结果都为0。正确的测试如下:

 
实际应用中,程序员常将上述测试简化为:

 

因为bit中有一位为1,而其他位都为0,因此lottabits & bit的结果要么为0(测试结果为false),要么为bit(非零值,测试结果为true)。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇附录F 模板类string 下一篇E.1.3 按位运算符的替代表示

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)