1.按位取反,将每个0变成1,每个1变成0
char ch=’a’;
char ch2=~a;
2.位与,两个操作数的对应位数都是1时,结果才为1.
int a=0,b=1;
int c=a&b;
3.位或,两个操作数的对应位数,只要有一个是1,结果就为1
int a=1,b=2;
int c=a|b;
4.位异或,两个操作数的对应位数相同则为0,不同则为1
int a=0,b=1;
int c=a^b;
5.左移运算符,将其左侧操作数的值的每位向左移动,移动的位数由其操作数指定。空出来的位用0填充,并且丢弃移出左侧操作数末端的位。
a=b<<2;
6.右移运算符
将其左侧的操作数的值每位向右移动,移动的位数由其右侧的操作数指定。对于unsigned类型,用0填充左端空出的位。对于有符号类型,结果依赖环境,空出的位可能用0填充,或者使用符号位的副本填充。
交换两个数,不需要临时变量
void test()
{
int a,b;
a=a^b;
b=b^a;
a=a^b;
}
判断一个数是否是2的n次方
bool test(int n)
{
return !(n&(n-1));
}