C语言中的一个表达式里运算符先后的问题
首先+和-的优先级比逻辑与和或高所以先做b+c和b-c,b+c=9,b-c=-1,
接着&&优先级比||高所以先做&&部分,由于b+c=9,b-c=-1两个式子的结果没有为0的都为真所以返回1;
而||之前a=3也为真所以最后返回布尔值1,d=1
同等级的运算符,先后顺序按结合性来进行。下面的代码有利于理解结合性。
int a,b=1,c=2; a=b=c; 上面的代码是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。所有的赋值符(包括复合赋值)都具有右结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2。
所有优先级相同的操作符,它们的结合性也相同。这是必须如此的,否则结合性依然无法消除歧义,如果在计算表达式的值时需要考虑结合性,那么最好把这个表达式一分为二或者使用括号。
例:
a=b+c+d =是右结合的,所以先计算(b+c+d),然后再赋值给a
+是左结合的,所以先计算(b+c),然后再计算(b+c)+d
在C语言中有少数运算符在C语言标准中是有规定表达式求值的顺序的:
1:&& 和 || 规定从左到右求值,并且在能确定整个表达式的值的时候就会停止,也就是常说的短路。
2:条件表达式的求值顺序是这样规定的:
test ? exp1 : exp2;
条件测试部分test非零,表达式exp1被求值,否则表达式exp2被求值,并且保证exp1和exp2两者之中只有一个被求值。
3:逗号运算符的求值顺序是从左到右顺序求值,并且整个表达式的值等于最后一个表达式的值,注意逗号','还可以作为函数参数的分隔符,变量定义的分隔符等,这时候表达式的求值顺序是没有规定的!
d先于右边的运算符++结合,然后再计算的结果求负操作。
特别说明:在实际应用中,一般会加括号进行限定。尽量不要写出容易产生歧义的代码
“运算符运算方向相反”是啥意思?就说-d++吧!int d=3;printf("%d",-d++);后结果肯定是-3。因为++是后++,要在printf("%d",-d++);执行完后才执行,最终使d=4。int d=3;printf("%d",-d++);和int d=3;printf("%d\n",-d);d=d+1;等价。
查看运算的优先级啊,不会存在冲突情况的,像你题目给出的 ,++是后置肯定放在最后面了。另外c语言优先级这种操作只局限于学习。如果工作中,你弄出这么表达式,工资就没了,记住了,工作的时候得用括号更名了
a+b+c 先运算第一个加 C语言默认是从左至右的 先运行左侧再运行右侧的
C语言中的一个表达式里运算符先后的问题
d先于右边的运算符++结合,然后再计算的结果求负操作。特别说明:在实际应用中,一般会加括号进行限定。尽量不要写出容易产生歧义的代码
C语言里面的运算符优先顺序如何?
C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。各等级运算符如下:(以下说明中,对传统的1级和2级做了细化,1和2对应传统1级,3...
关于c语言的一个问题:看这个表达式a=~b&c
表达式 "a=~b&c" 中的运算符优先级决定了其计算顺序。优先级从高到低排列如下:单目运算符、双目运算符、赋值运算符。单目运算符包括:~(按位取反运算符)、-(负号运算符)、-(自减运算符)、++(自增运算符)、*(取值运算符)、&(取地址运算符)、!(逻辑非运算符)。双目运算符包括:+...
c语言中,且或非的运算优先级的顺序是什么?
在C语言中,逻辑非(!)的优先级最高,其次是逻辑与(&&),再其次是逻辑或(||)。但为了避免表达式的复杂性导致优先级产生歧义,通常使用圆括号来明确运算的顺序。例如:```if (x > && y < 10 || z == 3) { \/\/ do something } ```在这个例子中,先执行逻辑与运算符(&&),在其次执行...
在VBA中,一个表达式中同时含有算数运算符关系运算符、关系运算符和逻辑...
优先级左结合 ()括号 []下标运算符 - >指向结构体成员运算符 >。结构成员运算符 2优先级右结合 !逻辑NOT运算符 按位运算符 + +递增运算符 - 自减运算符 - 减运算符 BR p>(类型)类型转换运算符 指针运算符 &地址运算符 长度的sizeof操作符 三个优先左结合 乘法运算符 \/除法运算符 %...
c语言程序中的优先顺序
在C语言中,有多种运算符和关键字具有不同的优先级,它们决定了它们在表达式中的运算顺序。以下是C语言中常见的运算符和关键字的优先级:1. 结合性:单目运算符、乘方运算、乘法和除法运算符具有右结合性,加法和减法运算符具有左结合性。2. 优先级:1. 乘方运算、整数除法、取模运算、取整运算、自...
C语言的运算符的优先级是什么?
这三个符号也是位运算符号,其中内优先级,&>^>|。7、第七级:&&、|| 逻辑与&&优先级大于逻辑或||。8、第八级:? :也称为条件运算符号,是C语言中唯一的一个三目运算符,结合顺序是从右往左。9、第九级:=、+=、-+、*=、\/=、%= 这些运算符也叫做赋值运算符,除此之外...
c语言中运算符号的优先顺序
基本的优先级需要记住:指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。请特别注意:逻辑运算最后结合。运算符是一种特殊的函数,它们具有一个或多个操作数并返回相应的值。操作数是被运算符用作输入的值,通常是字面值、变量或表达式。运算符可以是一元、二元或三元的...
运算符优先级由高到低的顺序是什么?
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。序列点 序列点是程序执行中的一个点,在这个点之前,前面的表达式的求值...
c语言运算符优先级从高到低的顺序依次为?
c语言运算符优先级从高到低的顺序依次如下:优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。不同类型的运算符之间也有相应的优先级...