代码之家  ›  专栏  ›  技术社区  ›  Ree

为什么printf()为大整数输出-1?

c
  •  4
  • Ree  · 技术社区  · 16 年前

    printf("unsigned int: 0 to %d\n", UINT_MAX);
    

    ... 产出如下:

    unsigned int: 0 to -1
    

    我怎么会得到-1?有人能解释这种行为吗?

    2 回复  |  直到 16 年前
        1
  •  15
  •   newgre    16 年前

    这是因为如果将UINT_MAX视为有符号整数,它将解析为-1。这样做的原因是,整数在 two's-complement . 因此,-1和4294967296(即UINT_MAX)具有相同的位表示(0xFFFFFFFF,即所有位集),这就是为什么在这里得到-1。


        2
  •  9
  •   Jarin Udom    16 年前

    无符号整数的最大值具有最高有效位集(均为1)。对于有符号整数,最高有效位指定负数,因此当您将无符号整数打印为有符号整数时,printf认为它是负数。