C ++中64位整数的奇怪行为

时间:2017-09-16 23:59:56

标签: c++ visual-studio int64

我对编程很陌生,我最近学到了一点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?

可能我错过了一些基本的东西,但我找不到与此相关的任何内容:(

2 个答案:

答案 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找到文档。