#讨论这个有意义吗?
这个是在知乎上看到的一个问题,评论挺多的。其中有人提到,研究这个东西有什么用?编程的时候我们不能这么写的。我记得在大学的时候,我们的副院长给我们上课,就给我们提到,要习惯并且喜欢使用 「( 」和 「)」,这两个符号。
所以上面的表达式,如果想表达清楚自己的意图,可以这样写
((x += 5) == 4)
或者是
(x += (5 == 4))
但是有些程序员为什么喜欢这样写呢?
我们可以肯定,写出这样代码的人,一定对运算符优先级背得滚瓜烂熟了。如果作为一个程序员,他认为对运算符要了如指掌,他觉得别人对这个代码肯定一眼就能看懂,他写出这样的代码也是没有问题的。
我们学这样的代码有什么用?
学习这样并不表示我们要写出这样的代码,而是,我们如果在工作学习中,遇到这样的代码,我们就一眼能看出来这个代码的作用。
C语言的标准有几百页,大部分人不会仔细研究每个细节,有些工程师觉得某些东西没有用,大概率是因为他在自己的工作中没有用到。有的程序员喜欢研究或者在工作中需要使用这样的方法,这就是这种代码存在的其中一个原因吧。
#表达式和运算符优先级
C语言在一个表达式中,如果遇到几个运算符,要考虑优先级和结合方向。
比如,表达式 x pri1 y pri2 z,可能出现两种可能性
(x pri1 y )pri2 z
x pri1 (y pri2 z)
如果运算符 pri1 的优先级比pri2 高,那么就是上面的第一种情况。
如果运算符 pri1 的优先级比pri2 低,那么就是上面的第二种情况。
如果优先级相同,那就要考虑结合方向。
结合方向是 「左到右」或者「右到左」。
例如,「= 」 的结合方向是 「右到左」。
所以
a = b = c 表达式的意义是 a =( b = c )
而 「+」的结合方向是 「左到右」
所以
a + b + c 表达式的意义是 (a + b) + c
#C语言运算符优先级
#解析上面的表达式
x += 5 == 4
「+=」 的优先级是14
「 ==」 的优先级是 7
所以上面表达式的意义是
x += (5 == 4)
运行一下
#表达式的巧用
很多人不怎么用这种取巧的写法,我这两天看代码看到一个,截图给大家看看,非常简单,也是一种取巧的方法,挺有意思的。一般情况下,我们还是会把 x = y 写在if 外面,直接写在if里面还是挺有意思的。
如果写成下面这样的话会输出什么呢?评论给出你的答案~
#include “stdio.h”
int main(void)
{
int x = 2;
int y = 4;
int z = 4;
if( x = y >= z){
printf("-----------01\n");
}
return (0);
}
原文链接:https://blog.csdn.net/weiqifa0/java/article/details/105462999