首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的溢出赋值2* 1024 * 1024 * 1024

奇怪的溢出赋值2* 1024 * 1024 * 1024
EN

Stack Overflow用户
提问于 2020-12-14 07:02:19
回答 1查看 150关注 0票数 2
代码语言:javascript
复制
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的输出是

代码语言:javascript
复制
 -2147483648
18446744071562067968

我不知道为什么这里发生溢出,请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

下面是固定的代码:

代码语言:javascript
复制
#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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65281609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档