我在使用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 )。
printf("unsigned long long int: \n%llu to %llu \n\n", 0, ULONG_MAX);返回:
无符号长int: 18446744069414584320至1580552164021 (Dev)
无符号长int: 18446744069414584320到0 (Visual )
然后我尝试使用printf打印两个零
printf("unsigned long long int: \n%llu to %llu \n\n", 0, 0);返回:
无符号长int: 0到1580552164021 (Dev-Cpp)
无符号长int: 0到0 (Visual )
还尝试了两个ULONG_MAX值
printf("unsigned long long int: \n%llu to %llu \n\n", ULONG_MAX, ULONG_MAX);返回:
无符号长int: 18446744073709551615至1580552164021 (Dev)
无符号长int: 18446744073709551615到0 (Visual )
它为什么表现得那样?你能给我解释一下吗?
发布于 2012-05-19 09:58:08
你不能通过unsigned long longs。您正在传递一个int (0)和unsigned long (ULONG_MAX)。您必须将承诺在格式字符串中传递的内容传递给printf()。
试一试:
printf("unsigned long long int: \n%llu to %llu \n\n", 0ULL, (unsigned long long)ULONG_MAX);发布于 2012-05-19 09:58:15
ULONG_MAX指的是unsigned long,而不是unsigned long long。对于后者,使用ULLONG_MAX (注意额外的L)。
您需要像这样更改printf()调用:
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()的参数与格式说明符匹配。
发布于 2012-05-19 11:31:24
long long int是C99标准中的一种类型,MSVC不支持这种类型。如果使用带有C99支持的编译器(如MinGW for Windows),它就会工作。
https://stackoverflow.com/questions/10664109
复制相似问题