|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
void main()
{
int a=15,b=15,c=15,d=15,q,p;
q=a%3 && a%5 || a++>++b;
p=c++>++d || c%3 && c%5;
printf("q=%d p=%d \n",q,p);
}
结果是: q=0 p=1
为什么两个运算结果不同?运算的过程是怎么样的?
本帖最后由 傻眼貓咪 于 2021-10-29 09:35 编辑
运算符优先级:
运算符 | ++ | % | > 或 < | && | || | = | 优先级 | 2 | 3 | 6 | 11 | 12 | 14 |
[b]你的代码:a = 15, b = 15, c = 15, d = 15
q = a%3 && a%5 || a++ > ++b;
q = 15%3 && 15%5 || 15++ > ++15; // 这里最优先级是 ++。先处理 ++b(注:这里的 ++ 在右边,最后处理)
q = 0 && 0 || 15++ > 16; // 这里最优先级是 %。先处理 a%3 和 a%5
q = 0 && 0 || 0(false); // 这里最优先级是 >。先处理 16 > b++
q = 0 || 0(false); // 这里最优先级是 &&。先处理 0 && 0
q = 0; // 这里最优先级是 ||。先处理 0 || 0[/b][b]
p = c++ > ++d || c%3 && c%5;
p = 15++ > ++15 || 15%3 && 15%5;
p = 15++ > 16 || 15%3 && 15%5;
p = 0 || 16%3 && 16%5; // 这里和上面不同的是(++ 在 || 左边,先执行 ++)
p = 0 || 1 && 1;
p = 1;
[/b]
|
|