如何确认C中unsigned char的范围?

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

我哪里做错了?

Som*_*ude 5

首先,当你传递一个小于变量int函数(如printf)的整数参数时,它会自动提升为int.

其次,当您使用算术时,会再次将较小的整数类型提升为int.

有关详细信息,请阅读此隐式转换参考.

如果要打印char(或更确切地说unsigned char)值,则需要使用hh格式说明符的前缀(请参阅printf参考和系列参考):

printf("%hhu\n", (unsigned char) (a - 1));
Run Code Online (Sandbox Code Playgroud)