本帖最后由 wslinke 于 2015-4-18 15:43 编辑
1.按位与
二进制运算符&通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位都为1时结果才为1
```
10110110
&
11011000
=
10010000
```
2.按位或
二进制运算符|通过对两个操作数逐位进行比较产生一个新值.对于每个位,只要有一个操作数的对应位为1时结果就为1
- 10110110
- |
- 11011000
- =
- 11111110
复制代码
3.按位异或
二进制运算符^通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位不相同时,结果才为1,即01得1, 10得1,00得0,11得0;
- 10110110
- ^
- 11011000
- =
- 01101110
复制代码
4.按位取反
二进制运算符~对一个操作数逐位进行取反,0变1,1变0
5.左移
将<<左侧操作数的值的每位向左移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数左端的位
- 10010111 <<2
- 结果值
- 01011100
复制代码
6.右移
将>>左侧操作数的值的每位向右移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数右端的位
- 10010111 >> 2
- 结果值
- 00100101
复制代码
最后补充:以上的位运算符都不会改变左操作数本身
附上使用位运算符来实现输出一个数的二进制数值的代码
- void print(int n)
- {
- //先求得这个数一共有多少个字节,再乘以8得到位数,-1是为了右移计数
- for (int i = (sizeof(n) << 3) -1 ; i >=0; i--) {
- //将这个数右移i位,即将这个数第i+1位上的数取到第1位上
- //再判断这个位上的值是否为1,输出它
- printf("%d",n >> i & 1);
- //每隔8位数字,打印一个逗号,以便查看结果
- if (i % 8 == 0 && i!= 0) {
- printf(",");
- }
- }
-
- }
复制代码
|
|