我想要打印出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字节无符号整数的最大值。
#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?
%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位。
使用%u
作为printf格式字符串。
这里是代码:
#include <stdio.h>
int main(void) {
unsigned int a = 0;
printf("%u", --a);
return 0;
}
输出:
4294967295
其工作原理是,0
是 unsigned int
的最小值,当你进一步减少该值 1
时,它会绕回并转移到最高值。
在 <limits.h>
中定义了一个宏:UINT_MAX
。
将%u
作为格式字符串以打印unsigned int
,使用%lu
来打印unsigned long
,并使用%hu
来打印unsigned short
。
您应该使用 <stdint.h>
和 <limits.h>
,然后使用 INT_MAX
或适用于您的类型的其他限制。
好奇而简单的方法就是:
printf("%lu",-1);
printf("%u", ~0); //用1填充无符号整数的所有位并打印该值。
%u
是用于“无符号整数”,然而 ~0
是一个“有符号整数”。 - M.Mprintf("==> 转换有符号为无符号整数:%u\n", (unsigned int)~0);
- Jonathan Komar~0u
。 - M.M
limits.h
(我不确定,但它可能是一个C++库)。 - elyashiv