为什么不同的编译器在对于c语言的自增自减结果不一样呢

稍微详细的讲解下 谢谢

自增有两种,分别为i++,++i
如果a=i++,那么a就等于i原来的值,i再自增,也就是如果加号在后面,i先用本身的值,再做自增
如果是a=++i,那么a就等于i+1,也就是,加号在前,先做自增,在赋值

自减是一样的,

送你一句话:如果加号在后,先用本身的值进行赋值,在做自增,如果加号在前,直接自增,再赋值
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-05
每种编译环境,把源代码解释成机器语言的时候,解释顺序不一样,关键是在这个解释过程
第2个回答  2013-01-05
这里涉及到C语言顺序点的问题,不同编译器有不同的实现,属于C语言的灰色地带本回答被提问者采纳
第3个回答  2013-01-05
每个编译器都不一样 有的自右向左

为什么不同的编译器在对于c语言的自增自减结果不一样呢
如果a=i++,那么a就等于i原来的值,i再自增,也就是如果加号在后面,i先用本身的值,再做自增 如果是a=++i,那么a就等于i+1,也就是,加号在前,先做自增,在赋值 自减是一样的,送你一句话:如果加号在后,先用本身的值进行赋值,在做自增,如果加号在前,直接自增,再赋值 ...

为什么在输出的时候在变量后面用自加自减没用
也就是说,可能一个编译器是从左到右计算,另一个编译器可能是从右到左计算。甚至一个编译器的两个不同版本在这个计算的顺序上都有可能不同。所以你换一个编译器,有可能得到的结果就完全不同了。

C语言自增自减问题 为什么q的结果是22呢
这个确实不好理解,解释如下:1.首先递增操作放在前面,是用的计算后结果,比如只有一个的时候,其实值是6,这个没问题吧。2.有问题的事两个的时候,两个加在一起,按理说会觉得是13,前面的6,后面的7,但是实际上不是,这是因为加法操作符是先算完两个部分,然后根据当时的值来算的,也就是说...

自增和自减有点怪呢?
C++的符号优先级是C语言的优先级一样的,所以<<虽然被cout用于重载输出用,但是实际上还是左移运算符的优先级,然而<<左移运算符的优先级比++,--的优先级都低,所以先做++,--,然后才输出,因为输出有多个<< 这样的左移运算符,所以输出是按从做到右的顺序做的,然而输出前的++,--确实先做的...

C语言:关于自加自减
首先,对于第一个问题我的答案是:否。因为严格的讲,赋值运算中必须有赋值运算符“=”,就像你题目中的所说的那是自增自减语句。但是呢,他的结果又相当于一个赋值运算的结果。要不为啥说C灵活呢,是吧,呵呵 对于第二个问题,我的答案是:都对!!!因为,这完全取决于你所使用的编译器,不同...

C语言自增自减问题
i=5; \/\/应该是a=5吧?x=(++a)+(++a)+(++a); \/\/这种问题没有必要分析的。在不同的编译系统下,答案不一样,在VC++下,答案是24。

c语言自增自减的前置后置 int a=3,b=3,c,d; d=a+++--a d的值应该是多 ...
d=a++;就是先把a的数值付给d,a再自加一,d=++a;就是a先自加一,再把a付给d;同理--和++原理一样。但是有关d=(a++)+(a++)+(a++);的结果,就不一定了,不同的编译器结果不一样。

哪位高手能我解释一下,关于C语言的自加和自减,越详细越好。
这也是为什么在循环中,如果有自增运算,我们更提倡使用前自增。不过这一点现在已经很少被提到了,一方面由于现代计算机的性能不断提升,多数情况下已经不需要考虑之二者这一点点差别了;另一方面,某些现代智能型的编译器,会在编译时自动替你完成这个优化工作的。

c语言中的自加自减
运行结果:a1=2,a2=1,a3=0 原因: printf( )参数的求值顺序为 从右--->左计算 a++,a++,a++先算右a++,在算左侧a++ 2. int a=0;y=a+++a+++a++; ---> y=(a++)+(a++)+(a++);由于++为后置自加运算,先处理表达式,再处理++ 所以,y=0+0+0=0,再进行三次++,a 的值为3 3...

c++中的前增与后增量的计算
对于自增和自减运算符的运算过程,不同编译器的处理是不太一致的。在VC中,这要涉及运算符优先级的问题。b = (a++) + (++a) + (a++);上式中,先行运算的是第一个a++,但它是滞后自增,也就是说,它的自增操作是在赋值运算符运行完后才进行的,因此,第一步:b = a + (++a) + ...

相似回答