- “&” 按位与 相应为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&7
inline 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;
}