代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

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

  •  16
  • Aakash Goel  · 技术社区  · 15 年前

    我在这里做错什么了?

    $ 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
    $ 
    

    我在期待 18446744073709551615 -1 在最后一行。


    32个 -1,应该是4294967295,而不是2147483647。现在事情变得更有意义了。

    5 回复  |  直到 15 年前
        1
  •  19
  •   sepp2k    15 年前

    使用 %llu ,不是 %lld . d printf 将其显示为有符号的长型。

        2
  •  29
  •   Jens Gustedt    15 年前

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

        3
  •  3
  •   salezica    15 年前

    执行以下操作可以获取无符号类型的最大值:

    unsigned long long x = (unsigned long long) -1;
    

    简单点,对吧?=). 第二,你在说 printf() 将给定变量解释为一个有符号的长十进制数。请改为:

    unsigned long long x = (unsigned long long) -1;
    printf("%llu", x);
    

    %llu 意思是“long long unsigned”。

        4
  •  2
  •   Kiril Kirov    15 年前
    unsigned long long ulTestMax = -1;
    printf ("max unsigned long long = %llu\n", ulTestMax );
    

    这在C++中工作,也应该在这里工作。

        5
  •  1
  •   Community Mohan Dere    8 年前

    无论谁对基里尔·基洛夫·波斯特做了-1,请看这里:

    Is it safe to use -1 to set all bits to true?

    在Kiril post中,仅需对标志扩展进行轻微修改:

    unsigned long long ulTestMax = -1LLu;