【发布时间】:2020-08-20 20:49:29
【问题描述】:
我正在使用 MSVC 2019,我正在测试一些东西。
感谢很多人,现在我得到了这张照片0:
long long a = 2147483648 + 2147483648;
printf("%lld\n", a);
所以这一次,我想'如果我将 2147483648 添加 3 次会怎样?',我做到了。
我认为结果一定是-2147483648,因为2147483648 + 2147483648 + 2147483648等于0 + 2147483648,而0和2147483648是int的值,所以它会是-2147483648
简单来说,我认为前面的代码是这样的:
long long a = (int)2147483648;
printf("%lld\n", a);
但它没有用。这是我写的代码:
long long a = 2147483648 + 2147483648 + 2147483648;
printf("%lld\n", a);
结果是2147483648,不知道为什么。
现在我头晕了哈哈
我做错了什么?
附言文件名是tmp.c
【问题讨论】:
-
@user4581301 但是当我添加 4 次时,比如
2147483648 + 2147483648 + 2147483648 + 2147483648,它给了我0,我认为这是正确的答案。 -
这取决于架构。
long long int可以与int64_t相同,后者可以保持最大值为9223372036854775807 -
@user4581301 no.. 他正在添加 64 位整数。
2147483645是 32 位,他正在添加2147483648。如果他做了long long int some_var = 3 * std::numeric_limits<int>::max(),那么他就有 int32 溢出。我将我的声明更改为can而不是isforA long long int is the same..很抱歉造成这种混乱。 -
VS-2019 为我显示(
2147483648- 未定义的值,它显示的内容是随机的):rextester.com/AMJ46137 但 clang 和 gcc 和 icc 都显示6442450944(使用 godbolt.org/z/M7Zeu5 测试) .. 我猜这是一个 msvc 编译器错误,但我不确定。 -
@Brandon,我们都对措辞不当的 cmets 感到内疚。 Hoseong Jeon 的previous question 玩了溢出,他们在这里的预期结果遵循上一个问题的 32 位数学的逻辑。据我所知,您的解释和预期结果是正确的,所以发生了一些有趣的事情。我将退出这个并等待澄清。
标签: c++ c visual-studio visual-studio-2019