对于大多数整数类型,最小值将比最大值大1“,对吧?
长距离的范围是-9223372036854775808到9223372036854775807。当我运行我的程序时,为什么-9223372036854775808和9223372036854775808都会给我一个编译器警告并导致错误,而不是只有intmax\u t max?
因为intmax_t min应该在-9223372036854775808有效,不是吗?
编辑:我也试过9223372036854775807和-9223372036854775807,它们都工作得很好。
最佳答案
(允许我对较短的数字使用16位值)
从技术上讲,当你用c写-32768
时,你已经写了:
“值32768的负数”
而且32768对于正16位值来说太大了,即使-32768是有效的。
这就是为什么您经常在头文件中看到limits.h
:
#define MAX_INT 32767
#define MIN_INT (-MAX_INT - 1)
/* Translates to -32767 - 1 ==> -32768 */
这个问题包含基本相同的信息:
Why are there differing definitions of INT64_MIN? And why do they behave differently?