2012-10-10 64 views
6

我想打印4个字节的无符号整数的最大值。如何打印无符号整数的最大值?

#include "stdafx.h" 
#include "conio.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    unsigned int x = 0xffffffff; 
    printf("%d\n",x); 
    x=~x; 
    printf("%d",x); 
    getch(); 
    return 0; 
} 

但我得到输出为-1和0.我怎样才能打印x = 4294967295?

+0

使用'limits.h'库(我不确定,但它可能是一个C++库) – elyashiv

回答

13

使用%u作为printf格式字符串。

3

您应该使用<stdint.h><limits.h>,然后INT_MAX或任何限制适合您的类型。

4

使用%u作为格式字符串打印unsigned int%luunsigned long,并且%huunsigned short

11

%d格式将其参数视为签署的int。改为使用%u

但是获得unsigned int类型的最大值的更好方法是使用宏UINT_MAX。您需要

#include <limits.h> 

使其可见。

您还可以通过将值-1转换为类型来计算无符号类型的最大值。

#include <limits.h> 
#include <stdio.h> 
int main(void) { 
    unsigned int max = -1; 
    printf("UINT_MAX = %u = 0x%x\n", UINT_MAX, UINT_MAX); 
    printf("max  = %u = 0x%x\n", max, max); 
    return 0; 
} 

注意,UINT_MAX一定0xffffffff。如果unsigned int碰巧是32位,但它可能小到16位;它在几个系统上是64位。

+1

'ULONG_MAX'用于'unsigned long',而不是'unsigned int'。 – nneonneo

+0

@nneonneo:固定,谢谢! –

5

<limits.h>中定义了宏:UINT_MAX

1

printf(“%u”,〜0); //用1填充unsigned int中的所有位并打印该值。

+0

这是未定义的行为,'%u'是'unsigned int',但'〜0'是'signed int' –