我对编程很陌生,我最近学到了一点C ++而我正在使用Visual Studio 2017社区版。
我需要使用64位整数来存储一个值并执行一些算术运算,但是我的编译器只允许我使用32位的" int64"我创造的变量。
以下是一些代码和行为的示例
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?
可能我错过了一些基本的东西,但我找不到与此相关的任何内容:(
答案 0 :(得分:2)
如果它只是一些基本的东西会很好,但事实证明64位整数在所有平台上都没有得到一致处理,所以我们必须依靠宏。
This answer介绍了PRIu64
中包含的PRIx64
,<inttypes.h>
和相关宏的使用情况。它看起来很有趣,但我认为便携式解决方案看起来像:
#include <inttypes.h>
unsigned __int64 testInt = 0x0123456789ABCDEF;
printf("int value = %016" PRIX64 "\n", testInt);
PRIX64
根据您的平台扩展为适当的格式说明符(Visual Studio可能为llX
。)
答案 1 :(得分:0)
格式说明符%X
采用无符号整数(系统上可能为32位),而__int64
对应long long
。
请改用printf("int value = %016llX\n", testInt)
。例如,可以在cppreference.com找到文档。