我想打印无符号整数的最大值,即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?
答案 0 :(得分:14)
使用%u
作为printf格式字符串。
答案 1 :(得分:14)
%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位。
答案 2 :(得分:6)
<limits.h>
中定义了一个宏:UINT_MAX
。
答案 3 :(得分:4)
使用 %u
作为格式字符串打印unsigned int
,%lu
打unsigned long
,%hu
打unsigned short
}}
答案 4 :(得分:3)
您应该使用<stdint.h>
和<limits.h>
,然后使用INT_MAX
或适用于您的类型的任何限制。
答案 5 :(得分:2)
代码如下:
#include <stdio.h>
int main(void) {
unsigned int a = 0;
printf("%u", --a);
return 0;
}
输出:
4294967295
工作原理是0
是unsigned int
的最小值,当您进一步降低该值1
时,它会回绕并移至最高值。
答案 6 :(得分:1)
printf(“%u”,~0); //用1填充unsigned int中的所有位并打印该值。
答案 7 :(得分:1)
好奇而简单的方法仅仅是
printf("%lu",-1);
它会打印您计算机中最大的未签名内容:)