代码改变世界

C++运算符的优先级和结合性

2012-07-01 10:54  杭伟  阅读(783)  评论(0编辑  收藏  举报

1.已知int i=1,j=2;则表达式i+++j的值为?

答:因为++运算符的优先级高于+,所以表达式为(i++)+j。对于i++来说,++后置,即先赋值,后自增。

      所以i+++j=1+2=3;另外可以知道i=i+1=2;

2.已知int i=1,j=2;则表达式++i+j的值为?

答:同第1题的分析,++运算符高于+,++前置,即先自增,后赋值。

      所以++i+j=2+2=4;另外i=i+1=2;

3.已知int i=0,j=1,k=2;则逻辑表达式 ++i || --j && ++k 的值为?

答:因为逻辑与 && 运算符的优先级高于逻辑或 || ,表达式为++i || (--j && ++k),

      算出 || 左边的值为1,右边的值为0。即1 || 0 ,结果为 1 。答案为 1 。(想想如果是1 || 2 呢?见第4题)

4.执行下列语句:

   int x,y;

   x=y=1; ++x || ++y;

   求 x ,y的值?

答:考察逻辑或 || 的结合性,其结合性为从左至右。首先左边的值为2。程序得到一个true值(1),即返回。

      所以x=2; y=1; 如果 ++x || ++y; 换成 --x || ++y; 则x=0; y=2;

5.已知 int x=5;执行 x+=x-=x*x; 后,x的值为?

答:从右往左结合,首先是 x-=25=-20, 然后x+=(-20), 即-20+(-20) = -40 。所以 x = -40;