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

11

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


使用库limits.h(我不确定,但它可能是一个C++库)。 - elyashiv
8个回答

17

%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位。


15

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


8

这里是代码:

#include <stdio.h>

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

输出:

4294967295

其工作原理是,0unsigned int 的最小值,当你进一步减少该值 1 时,它会绕回并转移到最高值。


6

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


4

%u作为格式字符串以打印unsigned int,使用%lu来打印unsigned long,并使用%hu来打印unsigned short


3

您应该使用 <stdint.h><limits.h>,然后使用 INT_MAX 或适用于您的类型的其他限制。


1

好奇而简单的方法就是:

printf("%lu",-1);

它会打印出你电脑上最大的无符号数字 :)

1

printf("%u", ~0); //用1填充无符号整数的所有位并打印该值。


这是未定义行为,%u 是用于“无符号整数”,然而 ~0 是一个“有符号整数”。 - M.M
@M.M. 简单的强制转换即可:printf("==> 转换有符号为无符号整数:%u\n", (unsigned int)~0); - Jonathan Komar
@JonathanKomar,这不会产生最大的无符号整数,在补码或反码系统中。应该是~0u - M.M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接