几个C++的运算表达式求解。

来源:百度知道 编辑:UC知道 时间:2024/05/23 10:03:04
int a=20,n=10;
1.a/=a+a
2.a%=n%=7
3.a+=a-=a*=a

int k=5,b=2;
printf("%d\n",k);
要求有过程,答案我知道。就是个运算符按什么优先级运算,把每一步写清楚最好。谢谢!
第二个题少了一句,k*=b+++3

赋值运算符:=,+=,-=,*=,/=,%=,>>=,>>=,&=,^=,|=
以上赋值运算符的优先级很低,只比逗号运算符高
并且赋值运算符的 “结合方向”是 “自右至左”.
所以在你给出的题目中就比较容易知道答案的理由了

具体分析如下:
1.a/=a+a相当于a=a/(a+a);又由于a是int型的,所以a输出的值应该是 0
2.a%=n%=7相当于这样的运算:
首先从右往左有 n=n%7 得出 n=3
然后a%=3 即 a=a%3 得出a=2
3.a+=a-=a*=a 同理 a*=a 即a=a*a a=400 此时a的值已经变为400了
a-=a 即 a=a-a a=0 此时a的值已经是0了
a+=a 即 a=a+a 也就是a=0+0 所以a=0

所以三个题的输出结果应该是0,2,0

int k=5,b=2;
printf("%d\n",k);
显然输出k的值是 5

1级优先级 左结合
() 圆括号
[] 下标运算符
-> 指向结构体成员运算符
. 结构体成员运算符
2级优先级 右结合
! 逻辑非运算符
~ 按位取反运算符
++ 自增运算符
-- 自减运算符
- 负号运算符
(类型) 类型转换运算符
* 指针运算符
& 地址与运算符
sizeof 长度运算符
3级优先级 左结合
* 乘法运算符
/ 除法运算符
% 取余运算符
4级优先级 左结合
+ 加法运算符
- 减法运算符
5级优先级 左结合
<< 左移运算符
>> 右移运算符
6级优先级 左结合
<、<=、>、>= 关系运算符
7级优先级 左结合