Sle*_*der 3 c unsigned integer range char
我的编译器的unsigned char包含1个字节.
所以据我所知,unsigned char的范围是0到2 ^ 8 - 1,即255.
现在我想确认无符号字符的最大整数可以显示为255.
以下是我的代码:
#include <stdio.h>
#include <limits.h>
int main(void)
{
printf("unsigned char has %d bytes.\n", sizeof(unsigned char));
unsigned char a;
a = 0;
printf("%d\n", a - 1);
printf("%u\n", a - 1);
printf("%lu\n", a - 1);
printf("%llu\n", a - 1);
printf("%zu\n", a - 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
unsigned char has 1 bytes.
-1
4294967295
4294967295
4294967295
4294967295
Run Code Online (Sandbox Code Playgroud)
4294967295是2 ^ 32 - 1
我哪里做错了?
首先,当你传递一个小于变量int函数(如printf)的整数参数时,它会自动提升为int.
其次,当您使用算术时,会再次将较小的整数类型提升为int.
有关详细信息,请阅读此隐式转换参考.
如果要打印char(或更确切地说unsigned char)值,则需要使用hh格式说明符的前缀(请参阅此printf参考和系列参考):
printf("%hhu\n", (unsigned char) (a - 1));
Run Code Online (Sandbox Code Playgroud)