为什么INT_MIN要定义在c语言的头文件limits.h中(-INT_MAX-1)而不是直接使用-2147483648

问题描述 投票:0回答:1
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)

我在看csapp这本书的时候,发现作者提出了这个问题,但是我不明白为什么要这么定义。直接用-2147483647定义有什么区别?

operating-system system
1个回答
-1
投票
#include <stdio.h>

int main() {
    printf("%d, %d\n",-2147483647-1,  sizeof(-2147483647-1)); 
    printf("%d, %d\n",-2147483648, sizeof(-2147483648)); 
    return 0;
}

输出:

-2147483648, 4
-2147483648, 8

在标准中说:

整数常量以数字开头,但没有句点或指数部分。它可能有一个指定其基数的前缀和一个指定其类型的后缀。

所以对于

-2147483648
,编译器将使用
2147483648
部分来确定它的类型,这将是long int,那么sizeof(MIN_INT)将是8,这是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.