C语言易错知识点三( 操作符优先级)

                  操作符优先级

    在本篇博客开始之前,我想问大家一个问题,在一段算式中同时存在 ' + ' 和 ' * ' ,如"5+3*4”,大家都知道应该先算 ' * ' ,再算 ' + ' 吧。那这段算式中加了个' ( ) ' ,如"(5+3) * 4",那就应该先算括号内的式子对吧?

    好,如果你连这些都知道的话,那本篇博客也就到此为止了,谢谢大家的观看,再见!

6abcbe469f9a4f59b622b495c1dcbfd6.gif

   开个玩笑,哈哈。 其实C语言中的操作符可不止这么简单(不然我也不会专门为他制作一篇博客鸭)。有过一定的了解的兄弟都知道,C语言中可不止 ' + ' , ' - ' , ' * ' , ' / ' 这些耳熟能详的操作符,还有按位与'&',按位或'|'等一系列操作符。

  这时候就会有兄弟好奇了,“那这么多操作符,若全在一段代码中出现了,我该如何计算呢?”

  诶,我知道你很急,但你先不要急m9(^Д^)プギャ一。C语言早就把各种操作符的优先级定义好了,睁大眼睛好好看,竖起耳朵好好听,打开心灵好好记,接下来我要传输真知了!

C语言中,对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外

不要问我为什么知道的这么详细,问就是cv工程师) 

  fdfc0361456746a7a6d60edf30f650a1.webp

博主先介绍几个大家可能不太熟悉的操作符(上图随意使用):

  1. "&",按位与 :二进制中两个均为1的取1,剩下的取0,如11100011 & 11010100 = 11000000
  2. "|",按位或:二进制中两个相同的保留,不同的为1,如11100011 | 11010100 = 11110111
  3. "^",按位异或:二进制中两个相同取0,不同取1,如11100011 ^ 11010100 = 00110111
  4. "&&",逻辑与:两个语句均为真才为真,即A(true) &&B (true) == true
  5. "||",逻辑或:两个语句只要其中一个为真就为真,即A(false) || B(false) == false,其余皆为true

那博主先出一道比较简单的题目,看看大家的自主理解力怎么样 (¬◡¬)✧

#include<stdio.h>
#define M(x. y, z)
x * y + z
main()
{
int a = 1,b = 2, c = 3;
printf("%d\n",M(a + b,b + c,c + a));
}

   就想问一下有没有兄弟是算的19的,举个手手🙋。这是牛客上的一道题,原答案解析是什么#define的边际效应,但咱们也看不懂,但其实他的意思就是将a b c直接带进去:1+2*2+3+3+1 = 12,而不是(1+2)*(2+3)+(3+1) = 19 哦。

  但此时就有人说:“这题太简单了,完全没有挑战性鸭!”欸,那下一个题怎么说呢?

设字符型变量的值是064,表达式"~x^x<<2&x"的值(八进制)是 多少?

  或许有不少兄弟看到这道题的时候都会眼前一黑(别问我为什么知道),但这同时也告诉我们: 

越简单清晰的事物不一定如同表面看起来那么简单--------大伟爱编程

   („ಡωಡ„)

  废话不多说,我们来看一下这道题目,x的值为064,好好看过我前面的博客的兄弟应该都清楚这是八进制的数吧,如果不清楚的话点击这里

                                     ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    C语言中容易错的知识点一(快来看)-CSDN博客

    王婆卖瓜,自卖自夸一波哈😁,看过的兄弟别建议。

    那首先八进制的064转为十进制就是52(4*8^0+6*8^1),再转为二进制为00110100(32位1*2^5+1*2^4+1*2^2),接着我们翻上去瞥一眼运算符优先级的表,运算步骤如下:

  1.    ~x按位取反(表中似乎没有,其实按位取反就是将二进制中的0变为1,1变为0),结果为11001011
  2. x<<2将x的二进制左移两位,结果为11010000
  3. (x<<2)&x即将第二步做按位与操作,结果为00010000
  4. 最后第三步的结果与~x做按位异或(相同的为0,不同的为1)操作,结果为11011011,转换为八进制就为333(这里的转换就不写了哈)

  那答案就是333吗?这其实还不完美,因为是八进制输出,所以需要前置0,所以结果就是0333

     看到这里大家都懂了吗? 

         韶华不为少年留,恨悠悠,几时休。 ------秦观

  本篇博客也就到此为止了,送大家一碗鸡汤,勉励自己以及这世界上所有追逐梦想的赤子趁年华尚好努力提升自己,莫欺少年穷!

谢谢大家的阅读,小白不懂事,若有什么好的意见或批评都请在评论区留下你宝贵的谏言,再见!

f714438ce8d44407b0ab26e094dfb26a.jpeg

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大伟听风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值