位运算
来源:互联网 发布:nginx点播系统 编辑:程序博客网 时间:2024/06/06 02:54
- “&” 按位与 相应为1,该位结果为1,否则为0
- “| “按位或 相应位有一个为1,该位结果为1
- “^” 按位异或 两个值相同则为0,否则为1
- “~” 取反 ~对二进制数按位取反,即将0变1,将1变0
- “<<” 左移 二进制位全部左移N位,右补0
- “>>” 右移 二进制位右移N位,右移的低位被舍弃,对于无符号数,高位补0。
░
- 按位与取模
//n%2 = n&1//n%4 = n&3//n%8 = n&7inline bool two(int x) { return x&1; }inline bool n_two(int x) {return !(x&1); }
- 按位异实现两个数的值交换
#include <iostream>#include <cstdio>using namespace std;int main(){ int a, b; while( scanf( "%d%d", &a, &b ) != EOF ){ cout<<a<<" "<<b<<endl; a = a ^ b; b = a ^ b; a = a ^ b; cout<<a<<" "<<b<<endl; } return 0;}
- 按位与与右移运算符实现快速幂
int pow(int x, int n){///x^n int p = 1; while (n){ if (n & 1) p *= x; x *= x; n >>= 1; } return p;}
- 附二进制输出数字
#include <iostream>#include <cstdio>#include <cstdlib>///using namespace std;int main(){ //freopen("in.txt", "r", stdin); int n; char b[100];/// while( scanf( "%d", &n ) != EOF ){ while( n ){ itoa(n,b,2); printf("%s ",b); itoa(n-1,b,2); printf("%s\n",b); n &= n-1; } } return 0;}
阅读全文
0 0