一个 7 行 C 代码的运行分析

深入理解计算机操作系统第3版、练习题2.44

源程序

//#include <stdio.h> #include "limits.h" int fun_A(int x) { return (x > 0) || (x - 1) < 0; } int main() { fun_A(INT_MIN); return 0; }

运行结果

32位补码域中、此表达式全为真

迷惑所在

当输入值为 INT_MIN 时,数据溢出为正数,求问为何表达式依旧运行无错?

汇编级别分析

为什么进行比较判断时、省略了 -1 的操作?

carbon.png