#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)
Run Code Online (Sandbox Code Playgroud)
我在看csapp这本书的时候,发现作者提出了这个问题,但是我不明白为什么要这么定义。-2147483647和直接用定义有什么区别?
小智 11
#include <stdio.h>
int main() {
printf("%d, %zu\n",-2147483647-1, sizeof(-2147483647-1));
printf("%d, %zu\n",(int)-2147483648, sizeof(-2147483648));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
-2147483648, 4
-2147483648, 8
Run Code Online (Sandbox Code Playgroud)
标准说:
整数常量以数字开头,但没有句点或指数部分。它可能有一个指定其基数的前缀和一个指定其类型的后缀。
请注意,-不是常量的一部分。它是一个否定运算符,在解释常量后应用。
因此-2147483648,对于 ,编译器将使用该2147483648部分来确定其类型。为此,该标准规定:
由于没有后缀指定其类型,并且2147483648不能用 int 表示(如 INT_MAX 2147483647),因此其类型将是long int,然后sizeof INT_MIN将是 8,这是错误的。
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |