gpt4 book ai didi

无法将 -2147483648 分配给 long long 类型的变量

转载 作者:太空狗 更新时间:2023-10-29 14:56:16 25 4
gpt4 key购买 nike

我正在编译下面的代码,出于某种原因,我无法将 -2147483648 分配给 8 字节长且已签名的变量。

long long x = -2147483648;

当我越过这一行时,x 的值为 2147483648,MS Visual Studio 中的“Watch”窗口显示 x 的类型为 __int64。 sizeof(x) 也返回 8。

根据 limit.h,signed long long 的限制是:

#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,编译器似乎会推断出 2147483648 是一个 32 位 unsigned long然后 它应用- 运算符。结果是 0 - 2147483648。由于它小于 0 并且是 unsigned long t,因此添加了 4294967296,这又是 2147483648。然后将该值分配给 long long x

建议:

long long x = -2147483648LL;
// or
long long x = -2147483647 - 1;

关于无法将 -2147483648 分配给 long long 类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com