void main()
{
long long ll = 2 * 1024 * 1024 * 1024;
unsigned long long ull = (2 * 1024 * 1024 * 1024);
std::cout << ll << "\n" << ull;
}我对Visual Studio 2019的输出是
-2147483648
18446744071562067968我不知道为什么这里发生溢出,请帮帮忙
发布于 2020-12-14 07:29:05
在这两种情况下,计算都是使用整数完成的,因为右侧的所有值都是整数字面值。2 * 1024 * 1024 * 1024是大于最大32位整数的1的2,147,483,648,所以这部分计算是溢出的。要修复此问题,请使用long long ll = 2LL * 1024 * 1024 * 1024;将第一个计算作为long long,使用unsigned long long ull = 2ULL * 1024 * 1024 * 1024;将第二个计算作为无符号long long
您可以在此处了解有关整型文字的更多信息:https://en.cppreference.com/w/cpp/language/integer_literal
下面是固定的代码:
#include <iostream>
#include <limits>
using namespace std;
int main()
{
long long ll = 2LL * 1024 * 1024 * 1024;
unsigned long long ull = 2ULL * 1024 * 1024 * 1024;
std::cout << ll << "\n" << ull;
}我将这个已修复代码的在线版本放在这里:https://ideone.com/5QkEls
https://stackoverflow.com/questions/65281609
复制相似问题