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、容易搞混的逻辑运算符和位运算符

C语言世界 文章被收录于专栏

C语言学习总结分享

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 12:20
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务