一个 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