bro*_*ng0 11 c syntax printf unsigned-long-long-int
我在使用printf函数打印类型值时遇到问题unsigned long long int
我不知道出了什么问题.我在Windows 7 Professional 64位上使用Dev-Cpp 4.9.9.2和Visual Studio 2010 Professional(我知道它不是C编译器,但无论如何,想要尝试).为了显示,我使用了%llu修饰符(根据你如何printf一个unsigned long long int(unsigned long long int的格式说明符)?)但是我也尝试了I64d没有效果......
首先,我只是想打印的最小值和最大值unsigned long long int(使用ULONG_MAX来自limits.h)
printf("unsigned long long int: \n%llu to %llu \n\n", 0, ULONG_MAX);
Run Code Online (Sandbox Code Playgroud)
返回:
unsigned long long int:18446744069414584320 to 1580552164021 (Dev-Cpp)
unsigned long long int:18446744069414584320 to 0 (Visual Studio)
然后我尝试使用printf打印两个零
printf("unsigned long long int: \n%llu to %llu \n\n", 0, 0);
Run Code Online (Sandbox Code Playgroud)
返回:
unsigned long long int:0到1580552164021 (Dev-Cpp)
unsigned long long int:0到0 (Visual Studio)
还尝试了两个ULONG_MAX值
printf("unsigned long long int: \n%llu to %llu \n\n", ULONG_MAX, ULONG_MAX);
Run Code Online (Sandbox Code Playgroud)
返回:
unsigned long long int:18446744073709551615 to 1580552164021 (Dev-Cpp)
unsigned long long int:18446744073709551615 to 0 (Visual Studio)
为什么它表现得那样?你能解释一下吗?
Die*_*Epp 11
这是错的:
printf("unsigned long long int: \n%llu to %llu \n\n", 0, ULONG_MAX);
Run Code Online (Sandbox Code Playgroud)
您使用unsigned long long格式说明符,但传递一个int和一个unsigned long值.促销规则意味着你可以马虎一切int尺度的或更小的,这并不能适用long long.
使用演员表:
printf("unsigned long long int: \n%llu to %llu \n\n",
0ULL, (unsigned long long) ULONG_MAX);
Run Code Online (Sandbox Code Playgroud)
说明:当传递参数时printf,任何可以适合的类型int都被提升为int,然后任何可以适合的类型unsigned int都被提升为unsigned int.只要传递的值可以使用格式说明符指定的类型表示,也可以将无符号类型传递给带符号的格式说明符,反之亦然.
所以,你必须小心地使用long和long long,但你可以马虎使用int,short和char.
大多数编译器都有设置让他们警告你这类错误,因为它可以很容易地在编译时被检测到; GCC和Clang会-Wformat产生以下警告:
test.c:5: warning: format ‘%llu’ expects type ‘long long unsigned int’, but argument 2 has type ‘int’ test.c:5: warning: format ‘%llu’ expects type ‘long long unsigned int’, but argument 3 has type ‘long unsigned int’
Ale*_*nze 10
你没有过世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);
Run Code Online (Sandbox Code Playgroud)