我想打印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?
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位.
这是代码:
#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
它会环绕并移动到最大值。