c - C 位优先级和结合性
问题描述
#include <stdio.h>
int main() {
int a = 1;
int b = a || (a | a) && a++;
printf("%d %d\n", a, b);
return 0;
}
当我运行这段代码时,结果是1
和1
。
根据 C 语言运算符优先级,操作&&
应该在操作之前发生||
。所以结果不应该是2
1
吗?( a = 2, b = 1
)
解决方案
当在 C 中对表达式进行 OR'ing 时,采用快捷方式,即一旦表达式被评估为 TRUE,其余的 OR'd 表达式不会被评估
第一个表达式的a
计算结果为 TRUE,因此所有其余的表达式都不会被计算,所以a
永远不会递增
推荐阅读
- node.js - Jasming 配置标志 (--config) 未使用正确的配置文件
- android - 在 2 个仿真器上运行仪器测试时 - connectedProStagingDebugAndroidTest 失败 - INSTALL_FAILED_INVALID_APK -/base.apk 代码丢失
- typescript - 在 Typescript 中,您如何输入 for (const element of elements ) {}
- api - 使用 api 进行颤振导航
- php - 如何直接从 cakephp 2.x 升级到 4.0?
- android - 使用数字笔/触控笔书写时禁用触摸输入
- javascript - 更新 React Hook 对象元素
- python - 如何在计算轮廓时避免图像帧计数?
- arrays - 如何将字符串列表转换为 JSON 数组 Groovy
- php - 更新后如何修复 PHP 模块问题