c语言中关系运算符的优先级 c语言中运算子有哪几种,优先顺序顺序是怎样
c语言中运算子有哪几种,优先顺序顺序是怎样
c语言中运算子有哪几种,优先顺序顺序是怎样
C语言的运算子主要用于构成表示式,同一个符号在不同的表示式中,其作用并不一致。下面按计算的优先顺序,分别说明不同作用的表示式。需要特别指出,在C语言标准中,并没有结合性的说法。
相同优先顺序运算子,从左至右依次运算。注意字尾运算优先顺序高于字首。因此++i++应解释为++(i++)。
而与或非的运算优先顺序都不一样,因此a && b || b && c解释为(a && b) || (b && c)
合理使用优先顺序可以极大简化表示式。
基本表示式 1级
基本表示式(Primary expressions),主要是用于运算子之间,做为运算数。
标识,常量,字串文字量,优先顺序提升表示式最优先执行。
优先顺序提升表示式是指圆括号包围的表示式,如“( expression )”
字尾表示式 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后新增。例如
int* a = (int[]) { 1, 2, 3 };
等价于 int unamed[] = {1, 2, 3}; unamed表示一个不可见的变数名。
int* a = unamed;
单目/一元运算 3级
++ unary-expression 字首自增
-- unary-expression 字首自减
unary-operator cast-expression 单目转型表式式, 包括 取地址& ,提领 * , 正号+ ,负号- 位反~ 逻辑否!。
sizeof unary-expression 求型别长度,对表达式求型别长度
sizeof ( type-name ) 求型别长度
强制型别表示式 4级
( type-name ) cast-expression,强制表示式成为type-name指定的型别。
乘法表达式 5级
“ * ” 乘法运算子;“ / ”除法运算子;“ % ” 取余运算子。
加法运算子 6级
“ + ”加法运算子;“ - ”减法运算子。
移位运算子 7级
<< 左移运算子;>> 右移运算子。
关系运算符 8级
<、<=、>、>=关系运算符。
相等运算子 9级
“ == ”等于运算子;“ != ”不等于运算子。
位与运算子 10级
“ & ”按位与运算子
位异或运算子 11级
“ ∧ ”按位异或运算子(Biise exclusive OR operator)。
位或运算子 12 级
“ | ”按位或运算子(Biise inclusive OR operator)。
逻辑与运算子 13级
“&&”逻辑与运算子。
逻辑或运算子 14 级
“ || ”逻辑或运算子。
三元条件运算子 15级
? :条件运算子。
赋值运算子 16 级
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算子。
逗号运算子 17级
“,”逗号运算子。
[pre]C 语言中,逗号(,)也可以是运算子,称为逗号运算子(Comma Operator)。逗号运算子可以把两个以上(包含两个)的表示式连线成一个表示式,称为逗号表示式。其一般形式为:
子表示式1, 子表示式2, ..., 子表示式n
例如:
a + b, c = b, c++
逗号运算子的优先顺序是所有运算子中级别最低的,通常配合 for 回圈使用。逗号表示式最右边的子表示式的值即为逗号表示式的值。上例中,c++ 的值(c 自增之前的值)即为该表示式的值。
逗号运算子保证左边的子表示式运算结束后才进行右边的子表示式的运算。也就是说,逗号运算子是一个序列点,其左边所有副作用都结束后,才对其右边的子表示式进行运算。因此,上例中,c 得到 b 的值后,才进行自增运算。
优先顺序:C语言中,运算子的运算优先顺序共分为15 级。1 级最高,15 级最低。 在表示式中,优先顺序较高的先于优先顺序较低的进行运算。而在一个运算量两侧的运算子 优先顺序相同时,则按运算子的结合性所规定的结合方向处理。
结合性:C语言中各运算子的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算子的结合性是自左至右,即先左后右。如有表示式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算子是赋值运算子。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算子中有不少为右结合性,应注意区别,以避免理解错误。
优先顺序从上到下依次递减,最上面具有最高的优先顺序,逗号操作符具有最低的优先顺序。
所有的优先顺序中,只有三个优先顺序是从右至左结合的,它们是单目运算子、条件运算子、赋值运算子。其它的都是从左至右结合。
具有最高优先顺序的其实并不算是真正的运算子,它们算是一类特殊的操作。()是与函式相关,[]与阵列相关,而->及.是取结构成员。
其次是单目运算子,所有的单目运算子具有相同的优先顺序,因此在我认为的 真正的运算子中它们具有最高的优先顺序,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。
另外在C语言里,没有前置后置之分,因为++ -- 是右结合所以右侧优先运算,表现为 "运算元后置优先顺序比较高" 的假象,前置和后置的区分是因为运算子过载而后加入C++的
接下来是算术运算子,*、/、%的优先顺序当然比+、-高了。
移位运算子紧随其后。
其次的关系运算符中,< <= > >=要比 == !=高一个级别,不大好理解。
所有的逻辑操作符都具有不同的优先顺序(单目运算子除外,!和~)
逻辑位操作符的"与"比"或"高,而"异或"则在它们之间。
跟在其后的&&比||高。
接下来的是条件运算子,赋值运算子及逗号运算子。
在C语言中,只有4个运算子规定了运算方向,它们是&&、| |、条件运算子及赋值运算子。
&&、| |都是先计算左边表示式的值,当左边表示式的值能确定整个表示式的值时,就不再计算右边表示式的值。如 a = 0 && b; &&运算子的左边位0,则右边表示式b就不再判断。
在条件运算子中。如a?b:c;先判断a的值,再根据a的值对b或c之中的一个进行求值。
赋值表示式则规定先对右边的表示式求值,因此使 a = b = c = 6;成为可能。
口诀注释
优先顺序等级口诀
圆方括号、箭头一句号, 自增自减非反负、针强地址长度,
乘除,加减,再移位,
小等大等、等等不等,
八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。
其中“,”号为一个等级分段。
优先顺序等级注释
“圆方括号、箭头一句号”指的是第15级的运算子。其中圆方括号很明显“()、[]”,箭头 指的是指向结构体成员运算子“->”,句号 指的是结构体成员运算子“.” ;
“自增自减非反负、针强地址长度”指的是第14级的运算子。其中 非 指的是逻辑运算子“!”,反 指的是按位取反运算子“~”,负 指的是负号运算子“-”,针 指的是指标运算子“*”,强 指的是强制型别转换运算子,地址 指的是地址运算子“&”,长度 指的是长度运算子“sizeof ”;
“乘除,加减,再移位”移位指的是左移运算子“<<”和右移运算子“>>”,其中除法还包括了 取余运算子“%”;
“小等大等、等等不等” 指的是第10级到第9级的运算子:<、<=、>和>=,等等指的是等于运算子==,不等指的是不等于运算子!=
“八位与,七位异,六位或”其中 八位与 指的是第8级的 按位与 运算子“&”,七位异 指的是第7级的按位异或运算子“^”,六位或 指的是第6级的按位或运算子“|”;
“五与,四或”指的是第5级、第4级的逻辑与运算子“&&”和逻辑或运算子“||”;
“三疑,二赋,一真逗”指的是第3级到第1级的运算子。其中,三疑指的是条件运算子“?:” (三有双重含义:即指优先级别是三,它的运算子型别也是三目,疑也取“?”之意),二赋 指的是赋值运算子=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第1级的“,”运算子,真字只是为了语句需要罢了。
由于C语言的运算子优先顺序与C++的不完全一样(主要是增加了几个运算子),所以这个口诀不能完全实用于C++.但是应该能够相容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先顺序的!
应用举例
1、赋值运算子:a=5;
a=b=0;
第一个赋值语句把5赋给变数a;第二个赋值语句的意思是把0同时赋值给两个变数。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算,先b=0,然后a=b。
2、复合赋值运算子:a=1;a+=3;
上面第二个赋值语句等价于a=a+3;即a=4。
3、算术运算子:Area=Height*Width;num=num1+num2/num3-num4;
第一个赋值语句Height和Width相乘结果赋给变数Area;第二个赋值语句先完成num2与num3的整除运算,然后与num1相加,再减去num4,结果赋给num。运算子运算顺序先算乘除再算加减。单目正和单目负最先运算。
4、逻辑运算子:a=1,b=1;
a||b-1;
因为a=1为真值,所以不管b-1是不是真值,总的表示式一定为真值,这时后面的表示式就不会再计算了。
5、关系运算符:if(a>0)...
如果a>0,则执行if语句中的内容,否则退出。
6、条件运算子:a=(b>0)?b:-b;
当b>0时,a=b;当b不大于0时,a=-b;其实上面的意思就是把b的绝对值赋值给a。
7、逗号运算子:b=2,c=7,d=5;
a=(++b,c--,d+3);
有三个表示式,用逗号分开,所以最终的值应该是最后一个表示式的值,也就是d+3=8,所以a=8。
8、位逻辑运算子
包括:1。&位与符 2。|位或符 3。^位异或符 4。~位取反符
以运算元12为例。位运算子将数字12视为1100。位运算子将运算元视为位而不是数值。数值
可以是任意进位制的:十进位制、八进位制或十六进位制。位运算子则将运算元转化为二进位制,并相应地返回1或0。
位运算子将数字视为二进位制值,并按位进行相应运算,运算完成后再重新转换为数字。例如:
表示式10&15表示(1010 & 1111),它将返回表示1010的值10。因为真真得真,或者是11得1,同位全是1结果也是1
表示式10|15表示(1010 | 1111),它将返回表示1111的值15。假假得假。全零得零。
表示式10^15表示(1010 ^ 1111), 它将返回表示0101的值5。此时是同性相斥,相同的就为假。
表示式~10表示(~1010),它将返回表示0101的值 -11。此号好理解,按位取反。
在c语言中,运算子的优先顺序的全记?
附录Ⅶ 运算子和结合性 优先顺序 运算子 含义 要求运算物件的个数 结合方法 1 ( ) [ ] → · 圆括号 下标运算标 指向结构体成员运算子 结构体成员运算子 自左至右 2 ! ~ ++ -- - (型别) * & sizeof 逻辑非运算子 按位取反运算子 自增运算子 自减运算子 负号运算子 型别转换运算子 指标运算子 地址与运算子 长度运算子 1 (单目运算子) 自右至左 3 * / % 乘法运算子 除法运算子 求余运算子 2 (双目运算子) 自左至右 4 + - 加法运算子 减法运算子 2 (双目运算子) 自左至右 5 << >> 左移运算子 右移运算子 2 (双目运算子) 自左至右 6 <<=︺>>= 关系运算符 2 (双目运算子) 自左至右 7 == != 等于运算子 不等于运算子 2 (双目运算子) 自左至右 8 & 按位与运算子 2 (双目运算子) 自左至右 9 ^ 按位异或运算子 2 (双目运算子) 自左至右 10 ︱ 按位或运算子 2 (双目运算子) 自左至右 11 && 逻辑与运算子 2 (双目运算子) 自左至右 12 ‖ 逻辑运算子 2 (双目运算子) 自左至右 13 ?: 条件运算子 2 (双目运算子) 自左至右 14 =+=-=*= /=%=>>=<<= &=^=︱= 赋值运算子 2 自右至左 15 , 逗号运算子(顺序求职运算子) 自左至右 说明: (1)同一优先顺序的运算子优先级别相同,运算次序由结合方向决定。例如,*与/具有相同的优先级别,其结合方向为自左至右,因此,3*5/4的运算次序是先乘后除。一和++为同一优先顺序,结合方向为自右至左,因此-i++相当于一(i++)。 (2)不同的运算子要求有不同的运算物件个数,如十(加)和-(减)为双目运算子,要求在运算子两侧各有一个运算物件(如3+5、8-3等)。而++和-(负号)运算子是一元运算子,只能在运算子的一侧出现一个运算物件(如-a、i++、--i、(float)i、sizeof(int)、*p等)。条件运算子是C语言中唯一的一个三目运算子,如x?a:b。 (3)从上述表中可以大致归纳出各类运算子的优先顺序: 初等运算子( )[ ]→ ↓ 单目运算子 ↓ 算述运算子(先乘除,后加减) ↓ 关系运算符 ↓ 逻辑运算子(不包括!) ↓ 条件运算子 ↓ 赋值运算子 ↓ 逗号运算子 以上的优先级别由上到下递减。初等运算子优先顺序最高,逗号运算子优先顺序最低。位运算子的优先顺序比较分散。为了容易记忆,使用位运算子时可加圆弧号。
求c语言中各类运算子的优先级别
c/C++的优先顺序
优先顺序 操作符 结合性
1 :: 左
2 . -> [] () 左
3 ++ -- ~ ! - + & * () sizeof new delete castname_cast<type> 单目操作符 右
4 .* ->* 左
5 * / % 左
6 + - 左
7 << >> 左
8 < <= > >= 左
9 == != 左
10 & 左
11 ^ 左
12 | 左
13 && 左
14 || 左
15 ?: 右
16 = *= /= %= += -= <<= >>= &= |= ^= 右
17 throw 左
18 , 左
问C语言中运算子有几种?
运算子的种类C语言的运算子可分为以下几类:
1.算术运算子
用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
2.关系运算符
用于比较运算。包括大于(>)、小于(=)、小于等于(>=,
计算机C语言中逻辑运算子“与”“或”“非”优先顺序是怎样的?
非的优先顺序最高(它是一个单目操作符)
与的优先顺序次之
或的优先顺序最低
单目操作符的优先顺序最高。
算术运算子的优先顺序顺序是()。
先要明确运算子按优先顺序不同分类,《C程式设计》运算子可分为15种优先顺序,从高到低,优先顺序为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算子的运算顺序。下面我们通过几个例子来说明:
(1) 5*8/4%10 这个表示式中出现3种运算子,是同级运算子,运算顺序按从左至右结合,因此先计算5 *8=40,然后被4除,结果为10,最后是%(求余数)运算,所以表示式的最终结果为10%10 = 0;
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
对于c=++a*b来说,按表中所列顺序,+ +先执行,*后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值计算式为4*5=20而不是3*5=15了;而对于d=a++*b来说,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。 这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b* 5)
例子中的“,”是逗号结合运算,上式称为逗号表示式,自左向右结合,最后一个表示式的结果值就是逗号表示式的结果,所以上面的逗号表示式结果为40,a的值为3,b的值为8,c的值为40。
(4)a=5;b=6;c=a>b?a:b;
例中的a>b?a:b是一个三目运算,它的功能是先做关系运算a>b部分,若结果为真,则取问号后a的值,否则取冒号后b的值,因此c的值应该为6,这个运算可以用来代替if…else…语句的简单应用。
二.学好C语言的四种程式结构
(1)顺序结构
顺序结构的程式设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如;a = 3,b = 5,现交换a,b的值,这个问题就好象交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程式为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程式,常见的输入、计算,输出三步曲的程式就是顺序结构,例如计算圆的面积,其程式的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程式的一部分,与其它结构一起构成一个复杂的程式,例如分支结构中的复合语句、回圈结构中的回圈体等。
(2) 分支结构
顺序结构的程式虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程式设计方法的关键在于构造合适的分支条件和分析程式流程,根据不同的程式流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程式时往往都要先绘制其程式流程图,然后根据程式流程写出源程式,这样做把程式设计分析与语言分开,使得问题简单化,易于理解。程式流程图是根据解题分析所绘制的程式执行流程图。
学习分支结构不要被分支巢状所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,巢状结构也就不难了。巢状只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支巢状是不难的。下面我介绍几种基本的分支结构。
①if(条件)
{
分支体
}
这种分支结构中的分支体可以是一条语句,此时“{ }”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程式段为:if(x<0) x=-x;
②if(条件)
{分支1}
else
{分支2}
这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根
分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程式段如下:
d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%8.4f,x2=%8.4fn”,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(“x1=%8.4f+%8.4fin”r, i);
printf(“x2=%8.4f-%8.4fin”r,i)
}
③巢状分支语句:其语句格式为:
if(条件1) {分支1};
else if(条件2) {分支2}
else if(条件3) {分支3}
……
else if(条件n) {分支n}
else {分支n+1}
巢状分支语句虽可解决多个入口和出口的问题,但超过3重巢状后,语句结构变得非常复杂,对于程式的阅读和理解都极为不便,建议巢状在3重以内,超过3重可以用下面的语句。
④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设定,也就是表示式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程式执行时,由第一分支开始查询,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查询下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设定以及break语句的合理应用。
(3)回圈结构:
回圈结构可以减少源程式重复书写的工作量,用来描述重复执行某段演算法的问题,这是程式设计中最能发挥计算机特长的程式结构,C语言中提供四种回圈,即goto回圈、while回圈、do –while回圈和for回圈。四种回圈可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto回圈,因为强制改变程式的顺序经常会给程式的执行带来不可预料的错误,在学习中我们主要学习while、do…while、for三种回圈。常用的三种回圈结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种回圈的格式和执行顺序,将每种回圈的流程图理解透彻后就会明白如何替换使用,如把while回圈的例题,用for语句重新编写一个程式,这样能更好地理解它们的作用。特别要注意在回圈体内应包含趋于结束的语句(即回圈变数值的改变),否则就可能成了一个死回圈,这是初学者的一个常见错误。
在学完这三个回圈后,应明确它们的异同点:用while和do…while回圈时,回圈变数的初始化的操作应在回圈体之前,而for回圈一般在语句1中进行的;while 回圈和for回圈都是先判断表示式,后执行回圈体,而do…while回圈是先执行回圈体后判断表示式,也就是说do…while的回圈体最少被执行一次,而while 回圈和for就可能一次都不执行。另外还要注意的是这三种回圈都可以用break语句跳出回圈,用continue语句结束本次回圈,而goto语句与if构成的回圈,是不能用break和 continue语句进行控制的。
顺序结构、分支结构和回圈结构并不彼此孤立的,在回圈中可以有分支、顺序结构,分支中也可以有回圈、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际程式设计过程中常将这三种结构相互结合以实现各种演算法,设计出相应程式,但是要程式设计的问题较大,编写出的程式就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程式设计成模组化结构。
(4)模组化程式结构
C语言的模组化程式结构用函式来实现,即将复杂的C程式分为若干模组,每个模组都编写成一个C函式,然后通过主函式呼叫函式及函式呼叫函式来实现一大型问题的C程式编写,因此常说:C程式=主函式+子函式。 因些,对函式的定义、呼叫、值的返回等中要尤其注重理解和应用,并通过上机除错加以巩固。
三.掌握一些简单的演算法
程式设计其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的程式语言写出程式码。这就要求掌握演算法,根据我们的《C程式设计》教学大纲中,只要求我们掌握一些简单的演算法,在掌握这些基本演算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些演算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对程式码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作;若a[2]~a[10] 中有一个比a[1]小,则将其中最大的一个(假设为a)与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a与a[2]交换,此时a[2] 中存放的10个数中第2小的数;依此类推,共进行9轮比较,a[1]到a[10]就已按从小到大的顺序存放。即每一轮都找出剩下数中的最小一个,程式码如下:
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a>a[j]
{temp=a;
a=a[j];
a[j]=temp;
}
求c语言中关系运算符,逻辑运算子等等各种运算子的优先顺序!
c语言运算子号
1级优先顺序 左结合
() 圆括号
[] 下标运算子
-> 指向结构体成员运算子
. 结构体成员运算子
2级优先顺序 右结合
! 逻辑非运算子
~ 按位取反运算子
++ 自增运算子
-- 自减运算子
- 负号运算子
(型别) 型别转换运算子
* 指标运算子
& 地址与运算子
sizeof 长度运算子
3级优先顺序 左结合
* 乘法运算子
/ 除法运算子
% 取余运算子
4级优先顺序 左结合
+ 加法运算子
- 减法运算子
5级优先顺序 左结合
<< 左移运算子
>> 右移运算子
6级优先顺序 左结合
<、<=、>、>= 关系运算符
7级优先顺序 左结合
== 等于运算子
!= 不等于运算子
8级优先顺序 左结合
& 按位与运算子
9级优先顺序 左结合
^ 按位异或运算子
10级优先顺序 左结合
| 按位或运算子
11级优先顺序 左结合
&& 逻辑与运算子
12级优先顺序 左结合
|| 逻辑或运算子
13级优先顺序 右结合
? : 条件运算子
14级优先顺序 右结合
= += -= *= /= %= &= ^= |= <<= >>= 全为赋值运算子
15级优先顺序 左结合
, 逗号运算子
在C语言中,逗号运算子的优先顺序最低吗?
逗号运算级最低! 逗号运算子优先顺序最低
括号成员第一; 括号运算子[]() 成员运算子. ->
全体单目第二; 所有的单目运算子比如++ -- +(正) -(负) 指标运算*&
乘除余三,加减四; 这个"余"是指取余运算即%
移位五,关系六; 移位运算子:<< >> ,关系:> < >= <= 等
等于(与)不等排第七; 即== !=
位与异或和位或; 这几个都是位运算: 位与(&)异或(^)位或(|)
"三分天下"八九十;
逻辑或跟与 逻辑运算子:|| 和 &&
十二和十一; 注意顺序:优先顺序(||) 底于 优先顺序(&&)
条件高于赋值, 三目运算子优先顺序排到 13 位只比赋值运算子和","高需要注意的是赋值运算子很多!
逗号运算级最低! 逗号运算子优先顺序最低
由于C语言的运算子优先顺序与C++的不完全一样(主要是增加了几个运算子),所以这个口诀不能完全实用于C++.但是应该能够相容,大家可以比较一下他们的区别应该就能够很快掌握C++的优先顺序的!
((*strDest++=*strSrc++)!=''); :
重点:++后增运算子优先顺序高于*
1.*strDest++相当于 *(strDest++)
2.由于是后自增,故执行顺序为:
*strDest=*strSrc
strDest++ strsrc++ 该级顺序不明
将*strDest与''比较 即,整个表示式的值为*strDest与''的比较结果
值得注意的是,对于赋值表示式,表示式本身的值等于左边子表示式的值。
通过以上深入的分析,我们知道这个表示式完成了以下多个功能:
1.对于指标strDest, strSrc,将strSrc所指的记忆体空间的值赋给由strDest所指的记忆体空间。
2.判断赋值后的strDest所指的记忆体空间的指是否等于0。
3.对于指标strDest,strSrc,他们的值分别加1,即指向下一个元素。
即:该表示式实现了以下三个功能:
1.对于指标strDest, strSrc,将strSrc所指的记忆体空间的值赋给由strDest所指的记忆体空间。
2.判断赋值后的strDest所指的记忆体空间的值是否等于0。
3.对于指标strDest,strSrc,他们的值分别加1,即指向下一个元素。
求C语言运算子的优先级别
第一级四个:
()
[]
->
.
第二级八个:
!
~
++
--
-(求负数)
*(间接定址运算子)
&(取地址运算子)
sizeof()
第三级三个:
*(乘号)
/
%
第四级两个:
+
-(减号)
第五级两个:
<<
>>
第六级四个:
<
<=
>
>=
第七级两个:
==
!=
第八级一个:
&(按位 与)
第九级一个:
^(按位 与或)
第十级一个:
|(按位 或)
第十一级一个:
&&(逻辑 与)
第十二级一个:
||(逻辑 或)
第十三级一个:
?:
第十四级十一个:
=
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
十五级一个:
,
就像数学上的加减乘除一样,优先顺序是用来划分表示式中符号的优先执行顺序的。
如:a+=b*c
因为*的优先顺序排在+=之前,所以会先执行b*c,而不是先执行a+=b
。。。

EXCEL中运算子的优先级别的顺序是怎么定的?
运算子优先顺序——引用运算子、算术运算子、连线运算子、比较运算子
引用运算子优先顺序—— :(冒号)、(单个空格)、 ,(逗号)
算术运算子优先顺序—— - 负数(如 –1)、% 百分比、^ 乘方、* 和 / (乘和除)、+ 和 –(加和减 )
连线运算子优先顺序——& 连线两个文字字串(串连)
比较运算子—— =、< 或 >(小于或大于)、=(不小于)、(不等于)[注:这些比较运算子是属同级运算]
使用括号
若要更改求值的顺序,可把公式中要先计算的部分用括号括起来