C学习:逻辑运算和位运算易混点

C学习:逻辑运算和位运算易混点

问题引入


特別注意这两个不常用的:~aa^b,前者按位取反,后者按位异或运算(不同得1,相同得0)。因为久了不用取反运算的话,容易搞混,下意识错用!a来表示按位取反,而本质是对a的整体做逻辑非运算。

另外,为便于记忆理解 &&&||| 的区别,可以理解为一个&表示对变量的按位操作,两个&即&&则考察变量整体来操作。 而且a & ba && b,前者a和b都会运算并将a、b按位与操作,后者只要a为假,就直接返回0,不会再去判断b真假了。||| 与之类似。

具体分析


位运算符

~a;       			// 按位取反,一元运算, 1011 > 0100
^a;       			// 异或操作  01=>1 10>1  00>0 11>0
a & 0x7f; 			// 按位与  
a | 0x7f; 			// 按位或

逻辑运算符,与或非,用法如下

!a;               	// 非操作,一元操作,若a整体不为0,结果0;若为0,结果1;
a < 0 && b > 0;   	// 与
a < 0 || b > 0;   	// 或

条件运算符中 & 与 &&| 与 || 的区别

  • & 左右两边条件都要判断,哪怕左边已经为假
  • && 一旦左边条件为假,则不判断右边,直接返回假
  • | 左右两边条件都要判断
  • || 一旦左边条件为真,则不判断右边,直接返回真.

验证:

int a = 0;
int b = 1;
if ( a == 0 || (b = a) ) {
   ;
}
printf("%d ", a);
printf("%d ", b);

以上代码,则输出结果为

 01   

如果 || 换为 |,输出结果会变为0, 0

相关资料


1、C 运算符之逻辑关系运算、位运算
2、容易搞混的逻辑运算符和位运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值