【发布时间】:2026-01-02 16:30:02
【问题描述】:
我对编程很陌生,我最近学了一点 C++,我正在使用 Visual Studio 2017 社区版。
我需要使用 64 位整数来存储一个值并执行一些算术运算,但是我的编译器只允许我使用我创建的“int64”变量的 32 位。
这是一些代码和行为的示例
unsigned __int64 testInt = 0x0123456789ABCDEF;
printf("int value = %016X\n", testInt); // only 32 bits are being stored here? (4 bytes)
printf("size of integer in bytes = %i\n\n", sizeof(testInt)); // size of int is correct (8 bytes)
存储在变量中的值似乎是 0x0000000089ABCDEF。 为什么我不能使用这个整数的所有 64 位,它似乎充当 32 位 int?
可能我错过了一些基本的东西,但我在搜索中找不到与此相关的任何东西:(
【问题讨论】:
-
您需要使用
%016llX而不是%016X。%X需要一个 32 位整数。 -
%X格式假定为标准unsigned(可能不是 64 位),而不是unsigned __int64。根据记忆,VS2017 中的unsigned是 32 位的。您需要使用ll前缀来获取long long unsigned -
中定义了 64 位特定格式说明符。见*.com/a/9225648/925478 -
使用调试器确定变量的实际内容。
-
@Reggie 我很高兴它成功了,但是为了将来的参考,学习编写可移植代码是非常明智的,这意味着处理宏和
"%016" PRIX64
标签: c++ visual-studio int64