运算优先级c语言
㈠ c语言中,以下运算符优先级最高的是_____
!(非)的优先级最高。
运算符基本的优先级:
指针最优,单目运算优于双目运算。如正负号。
先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.逻辑运算最后结合。
(1)运算优先级c语言扩展阅读:
C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。
运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
㈡ C语言里面的运算符优先顺序如何
C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
各等级运算符如下:
(以下说明中,对传统的1级和2级做了细化,1和2对应传统1级,3和4对应传统2级,所以细化说明共有17级。)
1、基本表达式 1级
基本表达式(Primary expressions),主要是用于运算符之间,做为运算数。
标识,常量,字符串文字量,优先级提升表达式最优先执行。
优先级提升表达式是指圆括号包围的表达式,如“( expression )”
2、后缀表达式 2级
postfix-expression [ expression ],数组下标运算。
postfix-expression ( argument-expression-list),函数调用,括号内的参数可选。
postfix-expression . identifier,成员访问,
postfix-expression -> identifier,成员访问,->号之前应为指针。
postfix-expression ++,后缀自增
postfix-expression --,后缀自减
( type-name ) { initializer-list }
( type-name ) { initializer-list , } 复合初始化,C99后新增。
3、单目/一元运算 3级
++ unary-expression 前缀自增
-- unary-expression 前缀自减
unary-operator cast-expression 单目转型表式式, 包括 取地址& ,提领 * , 正号+ ,负号- 位反~ 逻辑否!。
sizeof unary-expression 求类型长度,对表达式求类型长度
sizeof ( type-name ) 求类型长度
4、强制类型表达式 4级
( type-name ) cast-expression,强制表达式成为type-name指定的类型。
5、乘法表达式 5级
“ * ” 乘法运算符;“ / ”除法运算符;“ % ” 取余运算符。
6、加法运算符 6级
“ + ”加法运算符;“ - ”减法运算符。
7、移位运算符 7级
<< 左移运算符;>> 右移运算符。
8、关系运算符 8级
<、<=、>、>=关系运算符。
9、相等运算符 9级
“ == ”等于运算符;“ != ”不等于运算符。
10、位与运算符 10级
“ & ”按位与运算符
11、位异或运算符 11级
“ ∧ ”按位异或运算符(Bitwise exclusive OR operator)。
12、位或运算符 12 级
“ | ”按位或运算符(Bitwise inclusive OR operator)。
13、逻辑与运算符 13级
“&&”逻辑与运算符。
14、逻辑或运算符 14 级
“ || ”逻辑或运算符。
15、三元条件运算符 15级
? :条件运算符。
16、赋值运算符 16 级
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。
17、逗号运算符 17级
“,”逗号运算符。
具体可参见下图:
㈢ 运算符优先级(C语言中)
1级优先级
左结合
()
圆括号
[]
下标运算符
->
指向结构体成员运算符
.
结构体成员运算符
2级优先级
右结合
!
逻辑非运算符
~
按位取反运算符
++
前缀增量运算符
--
前缀增量运算符
+
正号运算符
-
负号运算符
(类型)
类型转换运算符
*
指针运算符
&
地址与运算符
sizeof
长度运算符
3级优先级
左结合
*
乘法运算符
/
除法运算符
%
取余运算符
4级优先级
左结合
+
加法运算符
-
减法运算符
5级优先级
左结合
<<
左移运算符
>>
右移运算符
6级优先级
左结合
<、<=、>、>=
关系运算符
7级优先级
左结合
==
等于运算符
!=
不等于运算符
8级优先级
左结合
&
按位与运算符
9级优先级
左结合
^
按位异或运算符
10级优先级
左结合
|
按位或运算符
11级优先级
左结合
&&
逻辑与运算符
12级优先级
左结合
||
逻辑或运算符
13级优先级
右结合
?
:
条件运算符
14级优先级
右结合
=
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
全为赋值运算符
15级优先级
左结合
,
逗号运算符
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。
具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。
其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的
真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
另外在c语言里
没有前置后置之分
因为++
--
是右结合所以
右侧优先运算
表现为
"后置优先级比较高"
的假象
前置和后置的区分是因为运算符重载而后加入c++的
接下来是算术运算符,*、/、%的优先级当然比+、-高了。
移位运算符紧随其后。
其次的关系运算符中,<
<=
>
>=要比
==
!=高一个级别,不大好理解。
所有的逻辑操作符都具有不同的优先级(单目运算符出外,!和~)
逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。
跟在其后的&&比||高。
接下来的是条件运算符,赋值运算符及逗号运算符。
在c语言中,只有4个运算符规定了运算方向,它们是&&、|
|、条件运算符及赋值运算符。
&&、|
|都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如
a
=
0
&&
b;
&&运算符的左边位0,则右边表达式b就不再判断。
望采纳
㈣ c语言优先级是什么
C语言的运算符包括单目运算符、双目运算符、三目运算符,优先级如下:
第1优先级:各种括号,如()、[]等、成员运算符。
第2优先级:所有单目运算符,如++、–、!、~等。
第3优先级:乘法运算符*、除法运算符/、求余运算指穗符%。
第4优先级:加法运算符+、减法运算符-。
第5优先级:移位运算符<<、>>。
第6优先级:大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=。
第7优先级:等于运算符==、不等于运算符!=。
第8优先级:按位与运算符&。
第9优先级:按位异或运算符^。
第10优先级:按位或运算符|丛宽。
第11优先级:逻辑与运算符&&。
第12优先级:逻辑或运算符||。
第13优先级:三目条件运算符?。
第14优先级:各种赋值运算符,如=、+=、-唯郑卜=、*=、/=等。
第15优先级:逗号运算。