如何在VS 2012和g ++中获取64位长篇
How to get a 64-bit long in both VS 2012 and g++
当我运行程序的 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");
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 如何从32位流程中获取可靠的内存使用信息以进行64位过程
- 如何使用在窗口中使用C++从CreateToolhelp32Snapshot获取64/32位进程详细信息和进程信息
- 获取 64 位整数乘法的高部分
- 如何在64位应用程序中获取模块大小
- 使用 AssocQueryString 从 32 位应用程序获取 64 位应用程序命令,但不起作用
- 如何在VS 2012和g ++中获取64位长篇
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 从32位进程获取64位进程内存的入口点
- c++:如何在Windows 32和64位获取最新的Java路径
- 从ASM(64位汇编)c++中获取值
- 获取64位整数中位位置的数组