【发布时间】:2014-01-22 22:25:31
【问题描述】:
我正在编译下面的代码,由于某种原因,我无法将 -2147483648 分配给 8 字节长且有符号的变量。
long long x = -2147483648;
当我越过这条线时,x 的值为 2147483648,MS Visual Studio 中的“观察”窗口显示 x 的类型为 __int64。 sizeof(x) 也返回 8。
根据limit.h,有符号长长的限制是:
#define LLONG_MAX 9223372036854775807i64 /* maximum signed long long int value */
#define LLONG_MIN (-9223372036854775807i64 - 1) /* minimum signed long long int value */
和:
/* minimum signed 64 bit value */
#define _I64_MIN (-9223372036854775807i64 - 1)
/* maximum signed 64 bit value */
#define _I64_MAX 9223372036854775807i64
我就是不明白!!!
有人可以解释一下吗?
【问题讨论】:
-
我认为你只需要“LL”字面量。所以
long long x = -2147483648LL; -
@David:是的,MS Visual Studio。他们怎么了?
-
那不是真正的 C 编译器。 C++ 编译器很好,但 C 编译器是 C89 的一些模糊近似,并不是一个很好的编译器。在 C 模式下编译时,所有赌注都关闭。
-
对于 GCC 中的我来说,这段代码编译但产生了错误的结果:它的大小是正确的,但数字是 正。我真的不明白。
-
是的,这很奇怪。我希望有人能对此有所了解。
标签: c