首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印无符号长int值类型返回奇怪的结果

问打印无符号长int值类型返回奇怪的结果
EN

Stack Overflow用户
提问于 2012-05-19 09:51:41
回答 3查看 16.1K关注 0票数 11

我在使用printf函数打印unsigned long long int类型的值时遇到了问题

我不知道怎么回事。我在Windows 7 Professional 64位上使用Dev-CPP4.9.9.2和VisualStudio2010Professional(我知道它不是C编译器,但无论如何想尝试)。对于显示,我使用了%llu修饰符(根据How do you printf an unsigned long long int(the format specifier for unsigned long long int)?),但我也尝试了I64d,但没有效果.

首先,我只想打印unsigned long long int的最小值和最大值(使用来自limits.h的ULONG_MAX )。

代码语言:javascript
复制
printf("unsigned long long int: \n%llu to %llu \n\n", 0, ULONG_MAX);

返回:

无符号长int: 18446744069414584320至1580552164021 (Dev)

无符号长int: 18446744069414584320到0 (Visual )

然后我尝试使用printf打印两个零

代码语言:javascript
复制
printf("unsigned long long int: \n%llu to %llu \n\n", 0, 0);

返回:

无符号长int: 0到1580552164021 (Dev-Cpp)

无符号长int: 0到0 (Visual )

还尝试了两个ULONG_MAX值

代码语言:javascript
复制
printf("unsigned long long int: \n%llu to %llu \n\n", ULONG_MAX, ULONG_MAX);

返回:

无符号长int: 18446744073709551615至1580552164021 (Dev)

无符号长int: 18446744073709551615到0 (Visual )

它为什么表现得那样?你能给我解释一下吗?

EN

回答 3

Stack Overflow用户

发布于 2012-05-19 09:58:08

你不能通过unsigned long longs。您正在传递一个int (0)和unsigned long (ULONG_MAX)。您必须将承诺在格式字符串中传递的内容传递给printf()。

试一试:

代码语言:javascript
复制
printf("unsigned long long int: \n%llu to %llu \n\n", 0ULL, (unsigned long long)ULONG_MAX);
票数 10
EN

Stack Overflow用户

发布于 2012-05-19 09:58:15

ULONG_MAX指的是unsigned long,而不是unsigned long long。对于后者,使用ULLONG_MAX (注意额外的L)。

您需要像这样更改printf()调用:

代码语言:javascript
复制
printf("unsigned long long int: \n%llu to %llu \n\n", 0ULL, ULLONG_MAX);
printf("unsigned long long int: \n%llu to %llu \n\n", ULLONG_MAX, ULLONG_MAX);

这确保了printf()的参数与格式说明符匹配。

票数 4
EN

Stack Overflow用户

发布于 2012-05-19 11:31:24

long long int是C99标准中的一种类型,MSVC不支持这种类型。如果使用带有C99支持的编译器(如MinGW for Windows),它就会工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10664109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档