如何打印无符号整数的最大值?

SHR*_*HRI 8 c

我想打印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;
}
Run Code Online (Sandbox Code Playgroud)

但我输出为-1和0.如何打印x = 4294967295?

Mus*_*usa 15

使用%u的格式化字符串.


Kei*_*son 14

%d格式将它的参数作为签字 int.请%u改用.

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

#include <limits.h>
Run Code Online (Sandbox Code Playgroud)

让它可见

您还可以通过将值-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;
}
Run Code Online (Sandbox Code Playgroud)

请注意,UINT_MAX是不是一定 0xffffffff.它unsigned int恰好是32位,但可能只有16位; 它在几个系统上是64位.


Fam*_*eng 6

有一个宏定义在<limits.h>:UINT_MAX.


Sye*_*ris 6

这是代码:

#include <stdio.h>

int main(void) {
    unsigned int a = 0;
    printf("%u", --a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

4294967295

它是如何工作的,这0是最小值unsigned int,当你进一步减小该值时,1它会环绕并移动到最大值。