在本篇博客开始之前,我想问大家一个问题,在一段算式中同时存在 ' + ' 和 ' * ' ,如"5+3*4”,大家都知道应该先算 ' * ' ,再算 ' + ' 吧。那这段算式中加了个' ( ) ' ,如"(5+3) * 4",那就应该先算括号内的式子对吧?
好,如果你连这些都知道的话,那本篇博客也就到此为止了,谢谢大家的观看,再见!
开个玩笑,哈哈。 其实C语言中的操作符可不止这么简单(不然我也不会专门为他制作一篇博客鸭)。有过一定的了解的兄弟都知道,C语言中可不止 ' + ' , ' - ' , ' * ' , ' / ' 这些耳熟能详的操作符,还有按位与'&',按位或'|'等一系列操作符。
这时候就会有兄弟好奇了,“那这么多操作符,若全在一段代码中出现了,我该如何计算呢?”
诶,我知道你很急,但你先不要急m9(^Д^)プギャ一。C语言早就把各种操作符的优先级定义好了,睁大眼睛好好看,竖起耳朵好好听,打开心灵好好记,接下来我要传输真知了!
C语言中,对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外
(不要问我为什么知道的这么详细,问就是cv工程师)
博主先介绍几个大家可能不太熟悉的操作符(上图随意使用):
那博主先出一道比较简单的题目,看看大家的自主理解力怎么样 (¬◡¬)✧
#include
#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 哦。
但此时就有人说:“这题太简单了,完全没有挑战性鸭!”欸,那下一个题怎么说呢?
或许有不少兄弟看到这道题的时候都会眼前一黑(别问我为什么知道),但这同时也告诉我们:
越简单清晰的事物不一定如同表面看起来那么简单--------大伟爱编程
(„ಡωಡ„)
废话不多说,我们来看一下这道题目,x的值为064,好好看过我前面的博客的兄弟应该都清楚这是八进制的数吧,如果不清楚的话点击这里
C语言中容易错的知识点一(快来看)-CSDN博客
王婆卖瓜,自卖自夸一波哈,看过的兄弟别建议。
那首先八进制的064转为十进制就是52(4*8^0+6*8^1),再转为二进制为00110100(32位1*2^5+1*2^4+1*2^2),接着我们翻上去瞥一眼运算符优先级的表,运算步骤如下:
那答案就是333吗?这其实还不完美,因为是八进制输出,所以需要前置0,所以结果就是0333
看到这里大家都懂了吗?
本篇博客也就到此为止了,送大家一碗鸡汤,勉励自己以及这世界上所有追逐梦想的赤子趁年华尚好努力提升自己,莫欺少年穷!
谢谢大家的阅读,小白不懂事,若有什么好的意见或批评都请在评论区留下你宝贵的谏言,再见!