10

我想打印 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?

4

8 回答 8

16

%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不一定。如果碰巧是 32 位,但它可能小到 16 位;它在一些系统上是 64 位的。 0xffffffffunsigned int

于 2012-10-10T05:58:33.130 回答
15

用作printf%u格式字符串。

于 2012-10-10T05:56:57.140 回答
6

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

于 2012-10-10T05:58:48.490 回答
6

这是代码:

#include <stdio.h>

int main(void) {
    unsigned int a = 0;
    printf("%u", --a);
    return 0;
}

输出:

4294967295

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

于 2019-02-12T10:50:26.607 回答
4

用作print 、for和for%u的格式字符串。unsigned int%luunsigned long%huunsigned short

于 2012-10-10T05:58:05.697 回答
3

您应该使用<stdint.h>and <limits.h>thenINT_MAX或任何适合您的类型的限制。

于 2012-10-10T05:57:13.410 回答
1

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

于 2013-11-15T00:28:37.983 回答
1

好奇而简单的方法就是

printf("%lu",-1);

它会打印您计算机中最大的未签名内容:)

于 2019-02-11T15:36:49.763 回答