首页 > 解决方案 > C 位优先级和结合性

问题描述

#include <stdio.h>

int main() {
    int a = 1;
    int b = a || (a | a) && a++;
    printf("%d %d\n", a, b);
    return 0;
}

当我运行这段代码时,结果是11

根据 C 语言运算符优先级,操作&&应该在操作之前发生||。所以结果不应该是2 1吗?( a = 2, b = 1)

标签: coperator-precedence

解决方案


当在 C 中对表达式进行 OR'ing 时,采用快捷方式,即一旦表达式被评估为 TRUE,其余的 OR'd 表达式不会被评估

第一个表达式的a计算结果为 TRUE,因此所有其余的表达式都不会被计算,所以a永远不会递增


推荐阅读