C语言运算问题,自增运算符

书上说 i=3,-i++;,表达式值是-3,i=4
偶写了个程序验证
#include <stdio.h>
main()
{
int i=3;
i=-i++;
printf("%d\n",i);
}
输出结果是-2
哪个有问题?
按照i++优先 -i++的结果为什么不是-4

两个都没问题。
请检查下你俩的代码有何不同。
一个是-i++
你的是i=-i++,多了个赋值。

另可以去百度百科看一下 逗号表达式 的概念。

++优先级大于-负号。
就决定了 ++与i结合,而不是与(-i)结合。
所以最后是i自增,由于i原来是3,所以i自增后是4.

但是++是使用i之后再加一,是在-i++表达式求值完成后,i才自增。
所以是先取出i的值,即3,然后变负,即-3,表达式-i++的值就是-3.

然后i才自增。 注意不是-i自增。因为++的优先级大于-,++只能与i结合。由于i是3,所以i自增后是4.
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-07
#include <stdio.h>
main()
{
int i=3;
// i=-i++;
printf("%d",-i++);// 注意这里 不要赋值给i 问题就在这里了
printf("%d\n",i);
}

你的语句执行的不是 i=3,-i++;
是 i=3;i=-i++;区别很大的咯
第2个回答  2010-09-07
这个就是(-i)++,正负号优先级比自增运算符优先级高
第3个回答  2010-09-07
楼上说得对,如果你要和书上一样就去掉前面的i=,因为i++是自加减运算,不用在前面加上i=,只用i++就可以达到运算目的。

在C语言中自增自减运算符有什么作用?
这是一类特殊的运算符,自增运算符++和自减运算符—对变量的操作结果是增加1和减少1.例如:--Couter; Couter-; ++Amount; Amount++;看这些例子里,运算符在前面还是在后面对本身的影响都是一样的,都是加1或者减1,但是当把他们作为其他表达式的一部分,两者就有区别了。运算符放在变量前面,那...

C语言自增自减运算符深入剖析
C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#include stdio.hvoid main() \/*主函数*\/{int a,b,c,d;a=5;b=5;c=(a++)+(a++)+(a++);d=(++b)+(++b)+(++b);printf("a=%d,b=%d,c=%d,d=%d...

C语言中算术运算符%,++,——,都是什么意思?能举例子说明吗?
C语言中,算术运算符“%”代表模(取余)运算,“++”代表变量自增运算,“--”代表变量自减运算。1、模运算“%”“模”是“Mod”的音译,模运算多应用于程序编写中。 Mod的含义为求余。模运算在数论和程序设计中都有着广泛的应用,从奇偶数的判别到素数的判别,从模幂运算到最大公约数的求法,...

C语言如何编写 实现的一个数的自加与自减?
C语言自增(++)和自减(--)运算符 自增运算符++的功能是使变量的值自增 1,自减运算符--的功能是使变量的值自减 1.自增和自减运算因其表达式中只有一个变量,所以称其为单目运算

C语言计算题,关于自加自减运算符计算的问题?
流程:自增、自减符先进行运算,但是由于前三个都是后缀,所以在执行玩改该行后才进行,所以先是2+2+2+(++i) ; 然后由于前缀的自增符(++i), 所以最后一个i变成3,最后变成 2+2+2+3 = 9;但是在执行该行后前三个自增、自减符进行运算,所以i(3)-->i(4)-->i(5) ...

c语言的自增自减问题
计算:从右往左,并输出到“缓冲区”。1、缓冲区是一堆栈 2、第一步:处理后面的“i--”。8进入缓冲区,i=7。缓冲区:8 <-(指针)第二步:处理“i++”。7进入缓冲区,i=8。缓冲区:7 8<- 第三步:处理”--i“。8进入缓冲区,i=7.缓冲区:8 7 8 第四步:处理“++i” 先自...

c语言中++和--各表示什么意思?
c=4*5=20.自增自减运算符存在于C\/C++\/C#\/Java等高级语言中,它的作用是在运算结束前(前置自增自减运算符)或后(后置自增自减运算符)将变量的值加(或减)一。相较于这些语言中的+=和-=运算符,自增运算符更加简洁,且可以控制效果作用于运算之前还是之后,具有很大的便利性。

C语言中括号和++的优先级问题
自增运算符在C语言中的使用与理解存在一些常见误区,本文将详细探讨自增运算符(++)的优先级问题,以及不同形式的自增运算符在具体语境中的应用。自增运算符分为前缀形(++a)和后缀形(a++),其本质是改变变量的值,然后返回该变量的原始值。部分开发者认为,前缀形式是先++再使用(先变后用),...

C语言计算题,关于自加自减运算符计算的问题?
自增、自减符先进行运算,但是由于前三个都是后缀,所以在执行玩改该行后才进行,所以先是2+2+2+(++i);然后由于前缀的自增符(++i),所以最后一个i变成3,最后变成 2+2+2+3 = 9;但是在执行该行后前三个自增、自减符进行运算,所以i(3)-->i(4)-->i(5)最后 -->i(4)

C语言运算符操作(自增自减)
回答:按照编译器原理解析的话,这个句子应该这样解析的,(k++) + ( j ) = 8, 这里我们不说优先级的问题,你可以查下~ 为什么你算出是9呢,我觉是你忘记了一个重点就是k++,这个是后加,也就是在整个表达式结束后k才加1,而在计算过程中k还是算原值5的,一般来说自加自减在单一的表达式中无先后...

相似回答
大家正在搜