关于C++的一个问题

[复制链接]
查看11 | 回复2 | 2008-5-26 18:09:46 | 显示全部楼层 |阅读模式
int x=1,y=0;
!x&&x+y&&++y;
上面的语句中出现了!、&& 、+、++这四个运算符,那么问题来了,到底先算谁呢?
有一个姓蔡的同学站起来说,++运算符在这里面优先级最高,理所应当最先算++,既先计算++y,再算!x,再算x+y,最后把它们&&起来。按照蔡同学的思路,第二步的结果是0&&x+y&&1,由于&&是严格运算,有一个为0结果既为0,所以不需要计算x+y了,整个语句的结果是:假。按照上面蔡同学的说法,执行完后y的值应该是1了,这对不对呢?
一位姓高的同学站起来反驳道,我觉得应该先计算!x,如果值为假,则不需要计算下去,最后结果为假。如果值为真,再计算x+y,同理如果其值为真,再去计算++y,否则最后结果也为假。
蔡同学不服起来说,高同学你觉得++和!谁的优先级高呢?高同学答道,那当然是++高。蔡同学接着问,那为什么还要先计算!呢?高同学答不出来了。
我运行了一下,y = 0即y依然是0,说明++y没有执行。我的问题是:++既然在上面的运算符中是最优的,为何不第一先执行呢?当然,高同学的话我也能看懂,只是觉得和书上说的优先级相矛盾啊!我应该怎样去理解这个问题呢?
答非所问,那些优先级我也懂,只要回答我问的问题就行

回复

使用道具 举报

千问 | 2008-5-26 18:09:46 | 显示全部楼层
下表从高到低列出了运算符的优先级。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。 表格 15-1. 运算符优先级 结合方向 运算符 附加信息 非结合 new new 左 [ array() 非结合 ++ -- 递增/递减运算符 非结合 ! ~ - (int) (float) (string) (array) (object) @ 类型 左 * / % 算数运算符 左 + - . 算数运算符和字符串运算符 左 > 位运算符 非结合>= 比较运算符 非结合 == != === !== 比较运算符 左 & 位运算符和引用 左 ^ 位运算符 左 | 位运算
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行