文章

18

粉丝

181

获赞

53

访问

91.7k

头像
1906 位运算+位运算常用操作
推荐阅读
P1906 华东师范大学2022年机试
发布于2022年8月29日 10:42
阅读数 4.0k

先看位运算常用操作

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 ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发