如何在C中显示无符号长long的最大值?

Laz*_*zer 16 c types long-integer

我在这做错了什么?

$ cat size.c
#include<stdio.h>
#include<math.h>

int main() {

printf ("sizeof unsigned int = %d bytes.\n", sizeof(unsigned int));
printf ("sizeof unsigned long long = %d bytes.\n", sizeof(unsigned long long));

printf ("max unsigned int = %d\n", (int)(pow(2, 32) - 1));
printf ("max unsigned long long = %lld\n", (unsigned long long)(pow(2, 64) - 1));

}
$ gcc size.c -o size
$ ./size
sizeof unsigned int = 4 bytes.
sizeof unsigned long long = 8 bytes.
max unsigned int = 2147483647
max unsigned long long = -1
$ 
Run Code Online (Sandbox Code Playgroud)

我期待18446744073709551615输出而不是-1最后一行的输出.


好吧,我完全错过了我得到的错误值为2 32 - 1,应该是4294967295,而不是2147483647.事情现在变得更有意义了.

Jen*_*edt 28

只是不要以为它具有一定的使用价值 ULLONG_MAX

  • `#include <limits.h>`以获得此宏以及其他宏.比如`LLONG_MAX`和`LLONG_MIN`. (14认同)

sep*_*p2k 19

使用%llu,而不是%lld.d是用于有符号整数,因此将其printf显示为带符号的长整数.