杨斌522 发表于 2021-10-29 00:30:51

算数运算问题

#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=%dp=%d \n",q,p);
}

结果是: q=0p=1

为什么两个运算结果不同?运算的过程是怎么样的?

hrpzcf 发表于 2021-10-29 03:09:51

q=a%3 && a%5 || a++>++b;
q=15%3 && 15%5 || 15 > 16
q=0 && 0 || 0
q=0 || 0
q=0

p=c++>++d || c%3 && c%5;
p=15 > 16 || 16%3 && 16%5
p=0 || 1 && 1
p=0 || 1
p=1

傻眼貓咪 发表于 2021-10-29 09:30:19

本帖最后由 傻眼貓咪 于 2021-10-29 09:35 编辑

运算符优先级:

运算符 ++ % > 或 < && || =
优先级 2 3 6 11 12 14

你的代码: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

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;


页: [1]
查看完整版本: 算数运算问题