c语言的优先与结合
❶ C运算符的优先级与结合性
1级(左结合)
() 圆括号;[]下标运算符;->指向结构体成员运算符;. 结构体成员运算符.。
2级(右结合)
!逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;&地址运算符;sizeof长度运算符。
3级(左结合)
*乘法运算符;/除法运算符;%取余运算符。
4级(左结合)
+加法运算符;-减法运算符。
5级(左结合)
<<左移运算符;>>右移运算符。
6级(左结合)
<、<=、>、>=关系运算符。
7级(左结合)
==等于运算符;!=不等于运算符。
8级(左结合)
&按位与运算符。
9级(左结合)
^按位异或运算符。
10级(左结合)
|按位或运算符。
11级(左结合)
&&逻辑与运算符。
12级(左结合)
||逻辑或运算符。
13级(右结合)
? :条件运算符。
14级(右结合)
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=赋值运算符。
15级(左结合)
,逗号运算符。
❷ c语言运算符优先级与结合性
++在后面先运算再+1
++在前面先+1再运算
所以k=10-20
如果是k=x-(++y) 那就是k=10-21了
❸ 谁能概括的帮我总结一下C中运算符的种类,运算优先级,结合性相关知识。
C语言中的运算符可以归纳为下列5类:算术运算符、关系运算符、赋值运算符、逻辑运算符和条件运算符。
1.算术运算符有+、-、*、/、%。
分别表示算术加、减、乘、除和取余运算。
这些运算符需要两个运算对象,称双目运算符。除取余(%)运算符外,这些运算符的运算对象可以是整型,也可以是实型数据。取余运算的运算对象只能是整型。取余运算的结果是两数相除后所得的余数。
″+″和″-″也可以用做单目运算符,但作为单目运算符时必须出现在运算量的左边,运算量可为整型,也可以为实型。
C语言中还提供两个特殊的单目运算符:++和--,这两个运算符既可以放在运算对象之前,又可以放在运算对象之后。
在C语言中,凡是按C语言语法规则用常量、变量、函数调用以及运算符把运算数连接起来的式子都是合法的表达式。凡表达式都有一个值,即运算结果。
2.在算术表达式中,C语言提供6种关系运算符:
<,>,<=,>=,==,!=。前四种运算符(<,>,<=,>=)的优先级相同,后两种的优先级也相同,并且前四种的优先级高于后两种。关系运算符属于双目运算符,其结合方向为自左至右。
用关系运算符可以将两个表达式(包括算术表达式、关系表达式、逻辑表达式、赋值表达式和字符表达式)连接起来构成关系表达式。
关系运算的结果是1或0。在C语言中没有逻辑值,用0代表″假″,用1代表″真″。
3.逻辑运算符
C语言提供三种逻辑运算符:&&(逻辑与)、‖(逻辑或)、!(逻辑非)。其中前两种为双目运算符,第三种是单目运算符。
关系运算符中的&&和‖运算符的优先级相同,!运算符的优先级高于前两个。
用逻辑运算符将关系表达式或任意数据类型(除void外)的数据连接起来就构成了逻辑表达式。逻辑表达式的值是0或1。
4.赋值运算符
在C语言中,″=″称为赋值运算符。由赋值运算符组成的表达式称为赋值表达式。表达式的形式为:
变量=表达式
赋值符号左边必须是一个代表某一存储单元的的变量名,赋值号的右边必须是C语言中合法的表达式。
赋值运算的功能是先计算右边表达式的值,然后再把此值赋给赋值号左边的变量,确切地说,是把数据放入以该变量为标识的存储单元中去。
5.条件运算符
C语言中把″?:″称作条件运算符。条件运算符要求有三个运算对象,它是C语言中唯一的一个三目运算符。由条件运算符构成的条件表达式的一般形式为:表达式1?表达式2:表达式3
当表达式1的值为非零时,取表达式2的值为此条件表达式的值;当表达式1的值为零时,取表达式3的值为此条件表达式的值。
条件运算符具有自右向左的结合性,其优先级别比关系运算符和算术运算符都低。
❹ 关于C语言运算优先级和结合方向的问题
-(i++)和-i++是一样的.虽然原则上说()的优先级比++要高.但是因为这边是++单目运算符,所以当我们考虑关于++或--的运算顺序的时候就不可以使用优先级来衡量,而应该是看这个运算符是在变量的左边还是在变量的右边,如果是在变量的左边的话,就先让变量+1,然后参加运算,如果是在右边就先参加运算,然后再使变量+1.
❺ c++运算符的优先结合
从上面的逗号运算符那个例子可以看出,这些运算符计算时都有一定的顺序,就好象先要算乘除后算加减一样。优先级和结合性是运算符两个重要的特性,结合性又称为计算顺序,它决定组成表达式的各个部分是否参与计算以及什么时候计算。
下面是C语言中所使用的运算符的优先级和结合性:
优先级 运算符 结合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右
❻ c语言优先级是什么
c语言优先级是:每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。
当多种运算符出现在同一个表达式中时,应该先按照不同类型运算符间的优先级进行运算。
各种运算符间的优先级如下:数值运算符、字符串运算符、关系运算符、逻辑运算符。可以用括号改变优先级顺序,使得括号内的运算优先于括号外的运算。对于多重括号,总是由内到外强制表达式的某些部分优先运行。括号内的运算总是最优先计算。
优先级结合性:
当一个运算对象两侧的运算符优先级别相同时,则按运算符的结合性来确定表达式的运算顺序。关于结合性的概念在其他高级语言中是没有的,这是C语言的特点之一。在标准C语言的文档里,对操作符的结合性并没有做出非常清楚的解释。
C语言也将34种运算符规定了不同的结合性。大多数运算符结合方向是“自左至右”,即:先左后右,也叫“左结合性”
例如 a-b + c,表达式中有-和+两种运算符,且优先级相同,按先左后右结合方向,先围绕减号结合,执行a-b的运算,再围绕加号结合,完成运算(a-b) + c。除了左结合性外,C 语言有三类运算符的结合方向是从右至左,也叫“右结合性”。
❼ C语言逻辑运算符的短路,优先级和结合性谁更
运算符 是用来对某些 数 进行操作的,这就有两个名词,1,运算符2,操作数,
运算符的优先级和结合性,是两个不同的概念。
优先级决定该运算符跟其他运算符相邻时,先进行哪个运算符的运算。
结合性决定该运算符是对它左边还是右边的数进行运算!
❽ c语言中的运算符优先级和结合性
1.a%=4-1;<==>a%=(4-1)<==>a%3=2
2.从右向左算, a=a*3 所以a=6a=a-6 所以a=0a=a*0 所以a=0a=a+0所以a=0
3.逻辑右移, 逻辑左移都存在,以下举例(为方便使用char类型,short,int 类似):
char cc = 1;//1(00000001)
cc = cc>>1;//1(00000000)
cout<<int(cc)<<endl;
输出为:0
cc = 3;//00000011
cc = cc>>1;//00000001,右边1溢出
cout<<int(cc)<<endl;
输出为:1;
cc = 128;//(10000000)
cc = cc>>1;//(11000000)负数右移时,符号位不变,所以有两个1;
cout<<int(cc)<<endl;
输出为:-64
unsigned char cc=128;
cc = cc>>1;//(01000000)无符号数右移时,因为不存在符号位,只有一个1;
cout<<int(cc)<<endl;
输出为:64
位移可用于计算2的乘除法,计算速度优于*,/运算,但可读性差,例如:
int i = 1;
i = i<<3;//等价于 i = i*2*2*2;
i = i>>1;//;//等价于 i = i/2;