当我试图打印UINT_MAX时,我得到-1

时间:2016-12-07 01:35:43

标签: c uint

当我试图打印'UINT_MAX'时,我得到它-1,为什么会这样?这是我在'main()'中唯一拥有的东西,一个打印'UINT_MAX'的printf语句

2 个答案:

答案 0 :(得分:0)

您使用了%d格式代码,该代码将其参数解释为带符号的int。您使用的是双补码系统,因此UINT_MAX0xFFFFFFFF)被解释为带符号的int,等于-1。如果您要将其解释为unsigned,请使用%u

答案 1 :(得分:0)

您可以使用printf()

进行打印
printf("%u\n", UINT_MAX);

您需要使用u说明符man printf

为什么你用d说明符得到-1?这是因为在内存中如何处理有符号整数。

unsigned integer从0开始,在内存中它是一个简单的二进制系统。

decimal =>二进制

  • 1 => 1
  • 2 => 10
  • 8 => 1000
  • 255 => 11111111

有符号整数使用一个位来解释为负数,这是令人困惑的,因为当它被解释为int时,unsigned int的最大值是-1。

8位整数的例子:

  • -1 => 11111111
  • -128 =>千万
  • -9 => 11110111

如您所见,第一位用作符号位。

尝试使用此site