——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
1.按位与
二进制运算符&通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位都为1时结果才为1
10110110
&
11011000
=
10010000
2.按位或
二进制运算符|通过对两个操作数逐位进行比较产生一个新值.对于每个位,只要有一个操作数的对应位为1时结果就为1
10110110
|
11011000
=
11111110
3.按位异或
二进制运算符^通过对两个操作数逐位进行比较产生一个新值.对于每个位,只有两个操作数的对应位不相同时,结果才为1,即01得1, 10得1,00得0,11得0;
10110110
^
11011000
=
01101110
4.按位取反
二进制运算符~对一个操作数逐位进行取反,0变1,1变0
10110110
~
=
01001001
5.左移
将<<左侧操作数的值的每位向左移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数左端的位
10010111 <<2
结果值
01011100
6.右移
将>>左侧操作数的值的每位向右移动,移动的位数由右侧操作数指定.空出的位用0填充,并丢弃被移出左端操作数右端的位
10010111 >> 2
结果值
00100101
最后补充:以上的位运算符都不会改变左操作数本身
附上使用位运算符来实现输出一个数的二进制数值的代码
void print(int n)
{
//先求得这个数一共有多少个字节,再乘以8得到位数,-1是为了右移计数
for (int i = (sizeof(n) << 3) -1 ; i >=0; i--) {
//将这个数右移i位,即将这个数第i+1位上的数取到第1位上
//再判断这个位上的值是否为1,输出它
printf("%d",n >> i & 1);
//每隔8位数字,打印一个逗号,以便查看结果
if (i % 8 == 0 && i!= 0) {
printf(",");
}
}
}