奇数转换C ++

时间:2018-08-24 12:16:51

标签: c++ numbers long-integer

所以我有以下代码:

#include <iostream>
#include <string>
#include <array>

using namespace std;

int main()
{
    array<long, 3> test_vars = { 121, 319225, 15241383936 };
    for (long test_var : test_vars) {
        cout << test_var << endl;
    }
}

在Visual Studio中,我得到以下输出:

  1. 121
  2. 319225
  3. -1938485248

在网站cpp.sh上执行的相同代码给出了以下输出:

  1. 121
  2. 319225
  3. 15241383936

我希望输出类似于cpp.sh的输出。我不理解Visual Studio的输出。这可能很简单;但是如果有人可以告诉我怎么了,我还是很感激。这已经成为我烦恼的真正根源。

1 个答案:

答案 0 :(得分:7)

MSVC使用4字节long。 C ++标准仅保证long至少与int一样大。因此,signed long可以代表的最大数量为2.147.483.647。您输入的内容太大,无法被long保留,因此您将必须使用更大的数据类型,至少64位。

另一个编译器使用了64位宽的long,这就是它在此处工作的原因。

您可以使用cstdint header中定义的int64_t。这样可以保证带符号的int的64位大小。

您的程序将显示为:

#include <cstdint>
#include <iostream>
#include <array>

using namespace std;

int main()
{
    array<int64_t, 3> test_vars = { 121, 319225, 15241383936 };
    for (int64_t test_var : test_vars) {
        cout << test_var << endl;
    }
}