结果为啥是9而不是4??

wbgxx 2010-06-20 10:49:32
#include <iostream.h>

int main()
{
int x=1,y;
y= ++x*++x;
cout << x << endl;
cout << y <<endl;
return 0;
}
...全文
373 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 2010-06-21
  • 打赏
  • 举报
回复
这种题很无聊,又是某个自以为是却啥都不懂的人出的“作业题”
sparrow081 2010-06-21
  • 打赏
  • 举报
回复
楼上正解
单目运算的优先级高于双目运算的 比如 awk perl 也是的
这与编译器关系不是很大,这是语言的特性

如果楼主是用lisp语言的话 就不会出现这种情况啦
LaoMaoing 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hhbgk 的回复:]
引用 1 楼 thefirstz 的回复:
研究这个没意思,还是看点别的知识实惠

只有考试才会出这样的题.....
实际应用极少用!
[/Quote]


感觉考试题很无聊
三断笛 2010-06-21
  • 打赏
  • 举报
回复
先算++再算*
相当于
x=1
x=x+1
x=x+1
y=x*x
laukie 2010-06-21
  • 打赏
  • 举报
回复
y=++x*++x;
第一次 ++x 后x为2,然后接着++x后x就为3了,然后再相乘 这样y就等于9了。
hushuo1984 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hhbgk 的回复:]
引用 1 楼 thefirstz 的回复:
研究这个没意思,还是看点别的知识实惠

只有考试才会出这样的题.....
实际应用极少用!
[/Quote]
老师喜欢哦
feitianNO1 2010-06-21
  • 打赏
  • 举报
回复
运算符优先级,++的运算符高于*
cs8728205 2010-06-21
  • 打赏
  • 举报
回复
无聊。。。
miracle222 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 wbgxx 的回复:]
C/C++ code
#include <iostream.h>

int main()
{
int x=1,y;
y= ++x*++x;
cout << x << endl;
cout << y <<endl;
return 0;
}
[/Quote]
首先,单目运算符比双目运算符高;因此先以上代码相当于执行了两次++x这时x变为3,之后执行双目运算符,所以,最终得到y = 9;
weiqibaxia 2010-06-20
  • 打赏
  • 举报
回复
运算符的优先级问题吧
zhangyafei13 2010-06-20
  • 打赏
  • 举报
回复
00.........
ccnyou 2010-06-20
  • 打赏
  • 举报
回复
如果把*理解为函数,那么它的参数是两个x,根据函数调用规则,若参数是表达式,则先求值,所以做了两次++x。
yzx714 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yzx714 的回复:]

汇编代码象这样:
Assembly code
#include <iostream.h>
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $1, -4(%ebp) !X赋值为1
addl $1, -4(%ebp) !X第一次++,X=2
……
[/Quote]怎么多了一行iostream,复制多了,敬请无视
yzx714 2010-06-20
  • 打赏
  • 举报
回复
汇编代码象这样:
#include <iostream.h>
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $1, -4(%ebp) !X赋值为1
addl $1, -4(%ebp) !X第一次++,X=2
addl $1, -4(%ebp) !X第二次++, X=3
movl -4(%ebp), %eax
imull -4(%ebp), %eax !相乘,3×3
movl %eax, -8(%ebp)
movl $0, %eax
leave
ret
Dstnoe 2010-06-20
  • 打赏
  • 举报
回复
学习了,
xddzccn 2010-06-20
  • 打赏
  • 举报
回复
玩语法游戏确实没有啥意思啊
时间一粒 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
研究这个没意思,还是看点别的知识实惠
[/Quote]
只有考试才会出这样的题.....
实际应用极少用!
yzx714 2010-06-20
  • 打赏
  • 举报
回复
先把x赋值为1,然后第一次++得2,再次++得3,把两个3相乘,最后得9。也就是说,先把操作数算完了再相乘的
chaoliu1024 2010-06-20
  • 打赏
  • 举报
回复
先做两个++运算,i的值为3。然后相乘,结果为9!
和编译器有关的!
cattycat 2010-06-20
  • 打赏
  • 举报
回复
这个把x计算完后再乘的,所以y=3*3.
加载更多回复(4)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧