C语言中的位运算符

&
按位与,对两个数的二进制的每一位,进行“并且”判断。

#include<stdio.h>
int main()
{
printf("%d\n",5 & 7);
return 0;
}

输出结果:5

因为
5的二进制是 01017的二进制是 0111;
第一位和第三位都为1(真);
所以
5 & 7的二进制是 01015 & 7=5

————————————————————————
|

按位或,对两个数的二进制的每一位,进行“或者”判断。

#include<stdio.h>
int main()
{
printf("%d\n",6 | 11);
return 0;
}

输出结果:15

因为
6的二进制是 011011的二进制是 1011;
对应位只要其中有一个是1就为真;
所以
6 | 11的二进制是 11116 | 11 =15

~
按位取反,对一个数的二进制的每一位取反

#include<stdio.h>
int main()
{
printf("%d\n",~3);
return 0;
}

结果为:-4

因为
3 的二进制为:0000 0011;
全部取反后
~3的二进制为:1111 1100

根据补码的知识可知-4的二进制为 1111 1100;

^
按位异或,对两个数的二进制的每一位,相同为0,不同为1.

#include<stdio.h>
int main()
{
printf("%d\n",4 ^ 7);
return 0;
}

输出结果为:3

因为
4 的二进制是 01007 的二进制是 0111;
第一位和第二位都是不同,第三和第四位相同

4 ^ 7 的二进制为:0011

<<>>
按位左移 和 按位右移,注意书写格式,要位移的量放在左边

算术右移:右边丢弃,左边补原符号位。

算术左移:左边丢弃,右边补零。

#include<stdio.h>
int main()
{
	int a = 3;
	printf("%d\n", a << 1);
	return 0;
}
因为
3 的二进制位 00113 << 1;的二进制是 0110

如果是 3 >> 1.

#include<stdio.h>

int main()
{
	int a = 3;
	printf("%d\n", a >> 1);
	return 0;
}
因为
3 的二进制位 00113 >> 1;的二进制是 0001;
多余的数会被顶掉。

注意: 对于位移运算符,不要移动负数位,这是个标准未定义的。
例如:

int a = 10;
a >> -1//错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值