如何在VS 2012和g ++中获取64位长篇

How to get a 64-bit long in both VS 2012 and g++

本文关键字:获取 64位 VS 2012      更新时间:2023-10-16

当我运行程序的 g++ 编译版本时,返回正确的总和 18510000000。当我运行VS 2012编译的程序时,返回1330130816。谁能解释为什么会这样以及如何修复代码以与两个编译器一起使用?

#include <iostream>
using namespace std;
int main()
{
    long sum = 0;
    for(int i = 0; i < 15000000; i++) {
        sum = sum + 1234;
    }
    cout << "sum = " << sum << endl;
    return 0;
}

VS 2012 正在编译 32 位整数,g++ 正在编译 64 位整数。使用 __int64 或长整型,或编译器强制使用 64 位整数所需的任何类型。

G++使用64位long,而Visual C++使用32位long。 如果要在这两个编译器上使用 64 位整数,请使用 long long。 如果要确保它是 64 位,最好使用 int64_t

如果您有跨平台代码,并且依赖于类型的大小,例如用于读取二进制文件格式或网络消息,则可以使用 static_assert 来帮助您。例如

static_assert(sizeof(sum1)==8 && CHAR_BIT == 8, "64-bit");