C语言中条件运算符与逻辑或和与,哪个优先级更高

Python016

C语言中条件运算符与逻辑或和与,哪个优先级更高,第1张

OperatorsAssociativity

()[]->.lefttoright

!~++--+-*(type)sizeofrighttoleft

*/%lefttoright

+-lefttoright

<<>>lefttoright

<<=>>=lefttoright

==!=lefttoright

&lefttoright

^lefttoright

|lefttoright

&&lefttoright

||lefttoright

?:righttoleft

=+=-=*=/=%=&=^=|=<<=>>=righttoleft

,lefttoright

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。

具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。

其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。

接下来是算术运算符,*、/、%的优先级当然比+、-高了。

移位运算符紧随其后。

其次的关系运算符中,<<=>>=要比==!=高一个级别,不大好理解。

所有的逻辑操作符都具有不同的优先级(单目运算符出外,!和~)

逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。

跟在其后的&&比||高。

接下来的是条件运算符,赋值运算符及逗号运算符。

在C语言中,只有4个运算符规定了运算方向,它们是&&、||、条件运算符及赋值运算符。

&&、||都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如a=0&&b&&运算符的左边位0,则右边表达式b就不再判断。

在条件运算符中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。

赋值表达式则规定先对右边的表达式求值,因此使a=b=c=6成为可能。

条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,

条件编译里面有判断语句,比如

#if

、#else

、#elif

#endif

它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如

#define

A

0

//把A定义为0

#if

(A

>

1)

printf("A

>

1")

//编译器没有编译该语句,该语句不生成汇编代码

#elif

(A

==

1)

printf("A

==

1")

//编译器没有编译该语句,该语句不生成汇编代码

#else

printf("A

<

1")

//编译器编译了这段代码,且生成了汇编代码,执行该语句

#endif

if

语句则不然,if

C

语言中的关键字,它根据表达式的计算结果来觉定执行那个语句,它里面的每个分支都编译了的,

#define

A

0

if

(A

>

1)

printf("A

>

1")

//编译器编译该语句,但因为A

==

0

未执行

else

if(A

==

1)

printf("A

==

1")

//编译器编译该语句,但因为A

==

0

未执行

else

printf("A

<

1")

//编译器编译该语句,因为A

==

0

故执行

所以

简单地讲,条件编译是根据

宏条件

选择性地编译语句,它是编译器在编译代码时完成的;

条件语句是根据条件表达式选择性地执行语句,它是在程序运行时进行的。