Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++; 我对编程很陌生,最近我学习了一点C++,我使用Visual Studio 2017社区版。_C++_Visual Studio_Int64 - Fatal编程技术网

C++; 我对编程很陌生,最近我学习了一点C++,我使用Visual Studio 2017社区版。

C++; 我对编程很陌生,最近我学习了一点C++,我使用Visual Studio 2017社区版。,c++,visual-studio,int64,C++,Visual Studio,Int64,我需要使用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

我需要使用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位整数


可能我遗漏了一些基本内容,但我无法通过搜索找到与此相关的任何内容:(

格式说明符
%X
接受一个无符号的int(在您的系统上可能是32位),而
\u int64
对应于
long


请改用
printf(“int value=%016llX\n”,testInt)
。例如,可以在中找到文档。

格式说明符
%X
采用无符号int(在系统上可能是32位),而
\uu int64
对应于
long


请改用
printf(“int value=%016llX\n”,testInt)
。例如,可以在上找到文档。

如果它只是一些基本的东西就好了,但事实证明,并非所有平台上都能一致地处理64位int,因此我们必须依赖宏

描述了
PRIu64
PRIx64
以及
中包含的相关宏的使用。看起来很有趣,但我认为便携式解决方案应该是:

#include <inttypes.h>
unsigned __int64  testInt = 0x0123456789ABCDEF;
printf("int value = %016" PRIX64 "\n", testInt);
#包括
无符号u_int64testint=0x0123456789ABCDEF;
printf(“int value=%016”PRIX64“\n”,testInt);

PRIX64
根据您的平台扩展为适当的格式说明符(对于Visual Studio可能是
llX

如果它只是一些基本的东西就好了,但事实证明并非所有平台上都能一致地处理64位整数,因此我们必须依赖宏

描述了
PRIu64
PRIx64
以及
中包含的相关宏的使用。看起来很有趣,但我认为便携式解决方案应该是:

#include <inttypes.h>
unsigned __int64  testInt = 0x0123456789ABCDEF;
printf("int value = %016" PRIX64 "\n", testInt);
#包括
无符号u_int64testint=0x0123456789ABCDEF;
printf(“int value=%016”PRIX64“\n”,testInt);

PRIX64
根据您的平台扩展为适当的格式说明符(对于Visual Studio可能是
llX

您需要使用
%016llX
而不是
%016X
%X
需要一个32位整数。
%X
格式采用股票标准
未签名的
(可能不是64位),不是一个
unsigned\uuu int64
。从内存来看,VS2017中的
unsigned
是32位的。您需要使用
ll
前缀来获取
long-long unsigned
中定义了64位特定的格式说明符。请参阅使用调试器来确定变量的实际内容。@Reggie我很高兴它能工作,但供将来参考因此,学习编写可移植代码是非常明智的,这意味着处理宏和
%016”PRIX64
您需要使用
%016llX
而不是
%016X
%X
需要一个32位整数。
%X
格式采用股票标准
无符号
(可能不是64位),不是一个
unsigned\uuu int64
。从内存来看,VS2017中的
unsigned
是32位的。您需要使用
ll
前缀来获取
long-long unsigned
中定义了64位特定的格式说明符。请参阅使用调试器来确定变量的实际内容。@Reggie我很高兴它能工作,但供将来参考Read,学习编写便携代码是非常明智的,这意味着处理宏和<代码>“% 016”Prx64 以最大可移植性(因此,要编写可移植的C++而不是Visual C++为X8664),最好不要使用<代码> Print(“int值=% 016”Prx64“\n”,TETint)。< MykWillis >的链接>?/代码>可能是的;虽然我认为<>代码>未签名的“y.64”/代码>也不是便携式的……为了最大可移植性(因此,要编写可移植的C++而不是Visual C++用于x8664),最好不要使用<代码> PRINTF(“int值=% 016”Prx64“\n”,TETINT)。
每@MykWillis的链接?@Darael:可能是的;虽然我认为
无符号uu int64
也不可移植…
PRIX64
,而不是
PRIX64
-OP的原始代码需要大写十六进制输出。根据该答案中的链接,这两个宏是不同的。
PRIX64
,而不是
PRIX64
-OP的original代码需要大写十六进制输出。根据答案中的链接,这两个宏是不同的。