文章
18
粉丝
183
获赞
57
访问
101.8k
1. ^ 异或
x ^ 0s = x
x ^ 1s = ~x
x ^ x = 0
2. & 位与
x & 0s = 0;
x & 1s = x;
x & x = x
3. | 按位或
x | 0s = x
x | 1s = 1s;
x | x = x;
4. x & (1 << n) (得到特定位)
1左移n位后我们得到一个类似于00001000的序列,所以通过这个例子我们把x所有位置0除了第n位,从而我们得到了第n位。
5. x | (1 << n) (设置特定位为1)
同第四个例子,1左移n位后我们得到一个类似于00001000的序列,x按位或00001000后我们能改变第n位,把她设置为1,x中其它位不会受到影响。
6. x & (~ (1 << n)) (清除特定位,即设置为0)
1左移n位后我们得到一个类似于00001000的序列,然后取非,得到11110111,x按位与11110111后我们只把第n位置0,其它位不会改变。类似的还有x &( (x << n) - 1) 和x &(~(-1 >>>(31 - i)))
7. (x & (~(1 << n))) | (y << n) (把x的第n位设置成y)
首先我们把x的第n位设置成0,然后把y左移n位得到一个第i位为y,其余位为0的序列,把这两个数位或就把x的第n位设置成了y。
我们只要获得数n的第i位和第j位的值,然后对其对应的位置进行重新赋值就行了。
具体可见代码注释
代码如下
//位运算,交换数字n的二进制数中的第i位和第j位
#include <bits/stdc++.h>
using namespace std;
int fun(int n, int i, int ...
登录后发布评论
暂无评论,来抢沙发