c+=c++怎么理解
发布网友
发布时间:2022-02-28 09:56
我来回答
共8个回答
热心网友
时间:2022-02-28 11:25
因为++的优先级比+=运算符的优先级要高,所以
c+=c++ 等价于 c+=(c++),又等价于
c = (c + (c++));
但需要注意的是,这个表达式的最终结果是不确定的,因为 c + (c++) 这个表达式
中,无法确定是+号前面的先求值,还是+号后面的先求值,这是由编译器决定的,C/C++标准中也是这样讲的。
结果就是,假如c=1;那么,如果+号左边的先求值,就是 c = 1 + 1 = 2;
如果是+号右边的先求值,就是c = 2 + 1 = 3;
在你的机器上,可能会得到2,也可能会得到3,但是你不能保证在别人的机器上也一定是2或者是3。因此,像这样的表达式应该避免,尽量不要写。
针对你对问题的补充,我再说一下,
你的结果正好是我所说的,编译器从+号右边先求值了
顺序如下: c = c + c++;
先计算 +号右边的c++,需要注意的是,是先求值,后自增,即如果c=1,c++的值是1,但运算
之后c就变成了2了,这样就是相等于 c = (c+1) + c = 2c + 1了
因为先对+号右边求值,所以c++的值虽然还是c,但运算之后+号左边后求值时的c已经是c++运算结果的(c+1)了,所以才等于 (c+1) + c = 2c+1
就是这么回事,我结合ANSI C语言标准,已经说的非常清楚了,希望对你有帮助:)
热心网友
时间:2022-02-28 12:43
1、因为++的优先级比+=运算符的优先级要高,所以
c+=c++ 等价于 c+=(c++),又等价于
c = (c + (c++));
但需要注意的是,这个表达式的最终结果是不确定的,因为 c + (c++) 这个表达式
中,无法确定是+号前面的先求值,还是+号后面的先求值,这是由编译器决定的,C/C++标准中也是这样讲的。
2、结果就是,假如c=1;那么,如果+号左边的先求值,就是 c = 1 + 1 = 2;
如果是+号右边的先求值,就是c = 2 + 1 = 3;
在一台机器上,可能会得到2,也可能会得到3,但是不能保证在别人的机器上也一定是2或者是3。因此,像这样的表达式应该避免,尽量不要写。
热心网友
时间:2022-02-28 16:09
c+ = c++;
也就相当于
c = c + (c++);
相当于
c = c + c;
c = c + 1;
所以是
(c+=c)++
仔细看后两个结果是一样的撒!
=======================
你加了运算符优先级最高括号,所以是先执行括号里面的再执行以外的运算。
c+=(c++)的运算顺序是
c = c + 1
c = c + c
(c += c)++ 的运算顺序是
c = c + c
c = c + 1
也就是我前面回答所说的。
================
前面那个叫笨小孩的说的有理。应该是他说的那样。
热心网友
时间:2022-02-28 18:17
是c=c+(c++) ,也就是c+=(c++)
用运算符的优先级就可以判断出来
问题是在于这样写是不好的书写,lz可以试一下,在不同的编译器中的结果,在TC2.0中c最后是3,但是在VC6.0中c结果是2,问题是在于c++的自增到底是发生在整个语句结束后,还是在应用后立刻发生的追问可c++不是先使用后自增吗?
追答诚如ls所讲,这个在C语法里没有规定,是由编译器自己决定的
热心网友
时间:2022-02-28 20:42
赋值表达式,从右向左开始进行运算
c+=c++;
是按你提供的第一个表达式的优先级运算的;
等价于:c=c+(c++);
你给的第二个表达式是错误的,++/--的运算对象必须是变量,不能是数值(不能是一个表达式的计算结果)。
热心网友
时间:2022-02-28 23:23
是第一个, 运算符优先级问题,不过最好要这么写, 不好的编码习惯
热心网友
时间:2022-03-01 02:21
c = c + (c++);
组合数公式C= C(n, m)怎么理解?
组合数公式C=C(n,m)=A(n,m)/m。组合数公式是指从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合,从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做n个不同元素中取出m个元素的组合数。用符号c(n,m) 表示。组合公式的推导是由排...
赋值语句 C=(a,b,c)怎么解释
从左到右计算,先计算a表达式,再计算b表达式,最后计算c表达式,将逗号表达式的最后的一个表达式赋给C
c语言(!b)==c怎么理解?
(1或者0)==c,当c等于括号中的值时,整个表达式等于1(真);否者等于0(假)。
c语言中c==0和c=0区别
==是关系运算符,语句c==0是一个关系表达式,就是当c是0的时候语句为真,表达式值为1,c不是0的时候语句为假,表达式值为0。而c=0就是赋值语句,将0赋值给c
C语言中 a=b==c怎么理解
“=”是赋值符,把c的值赋给b赋给a,最后a、b、c的值都相等,“==”是判断符;=赋值==等于运算说a=b=c,表达式运行a值赋给b、c运行完abc值相等;a=b==c,复合表达式先a值赋给b与c比较相等则返0,否则返非零值;运算b==c,若b与c相等,那么得出的值为1。
排列组合c怎么算
2、交换性质:C(n,m)=C(n,m-1)+C(n-1,m-1),也就是说,从n个元素中取出m个元素的组合数等于从n个元素中取出m-1个元素的组合数加上从n-1个元素中取出m-1个元素的组合数。这个性质可以用来拆分组合数,从而更方便地解决问题。3、递推关系:C(n,m)=C(n-1,m-1)+C(...
热容的表达式是Q/丅,热温商的表达式也是Q/T,怎么理解?
这是一道关于热容和热温商表达式理解的问题。首先,我们需要明确这两个概念的定义和用途。1. 热容的定义:1. 热容(C)是物质在某一过程中吸收或放出的热量(Q)与温度变化(ΔT 或 Δθ,有时简化为T的差值)之比。2. 表达式:C = Q / ΔT 或 C = dQ / dT(在微小温度变化时)。3. ...
B∪C=C说明什么啊
B∪C=C说明B是C的子集,即B包含于C,C包含B 如果不懂,请追问,祝学习愉快!
C语言程序中a=b==c是什么意思
1、赋值语句本身也是一个表达式,也是有返回值的,它的返回值就是赋值给变量的值,比如b=1这个语句,会把1赋值给b,但是它本身也是个表达式,这个表达式的返回值为1。2、赋值语句是先算等号右边的值,把右边的值赋值给左边的变量 3、分析一下a=b=c,按照赋值语句的运算方式,计算右边的表达式,也...
麻烦 帮我讲解物理公式 为什么C=入F
光的速度公式 c=λf,其中 λ 光在中空中的波长,f光的频率。光的频率由光源决定是不变的,光的波长与介质有关是随介质变化的。