【问题标题】:Is Visual Studio 2022 handle type promotion incorrectly? [duplicate]Visual Studio 2022 是否错误地处理类型提升? [复制]
【发布时间】:2022-01-23 09:00:41
【问题描述】:

如果你将两种不同的类型相乘,C++ 中的 AFAIK,结果将是更大的类型。 但在 Visual Studio 2022 中,这段代码:

#include <iostream>

int main()
{
    long a = 7182L * 300000;
    std::cout << a << '\n';
}

输出是-2140367296,这肯定是错的吗?或者我的 Visual Studio 安装有问题? 我尝试使用 clang online 和 clang 输出 2154600000

【问题讨论】:

  • long 可以存储的最大值是多少?找出来,你就会知道这两个编译器都没有错。
  • 换一种说法,std::numeric_limits&lt;long&gt;::max() 在您的系统上的值是多少? (您的在线编译器的值可能不同。标准允许这两种结果。)

标签: c++ visual-studio-2022


【解决方案1】:
int main()
{
    // long a = 7182L * 300000;
    unsigned long a = 7182l * 300000;
    std::cout << a << '\n';
}

这个结果:2154600000 给我。 Windows 10 x64 PC + Visual Studio 2022
所以我认为long 可能不符合结果。

【讨论】:

    猜你喜欢
    • 2023-01-02
    • 1970-01-01
    • 2022-10-30
    • 1970-01-01
    • 2022-07-13
    • 2022-08-15
    • 2022-08-08
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多