msc*_*msc 2 c operators integer-overflow signed-integer
该程序要求C实现回答一个简单的问题:
如果我们检查最大的可重现整数INT_MAX <0并打印它.
printf ("%d\n", (INT_MAX) < 0);
Run Code Online (Sandbox Code Playgroud)
所以,显示输出0.因为条件变为假,关系运算符返回0.
但是,如果我们添加 1到最大的可重现的整数和检查条件,请参阅以下程序.
#include <limits.h>
#include <stdio.h>
int main (void)
{
printf ("%d\n", (INT_MAX+1) < 0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并显示输出 1.
为什么条件不会变错?
另外,如果我们将一个加到最大的可重现整数,那么结果是否定的?
的行为INT_MAX + 1是不确定的,你会溢出一个signed类型.
该程序可以输出任何东西,或者编译器可以吃你的猫.
(出于兴趣,这就是为什么你会看到2的补体系统-INT_MAX - 1的定义INT_MIN.)