Mar*_*son 4 c char integer-promotion unsigned-integer signed-integer
我在编写一个程序试图打印 UTF-8 字符的组成字节值时遇到了这个问题。
这是我为测试各种操作而编写的程序~0:
#include <stdio.h>
int main()
{
printf("%x\n", (char)~0); // ffffffff
printf("%x\n", (unsigned char)~0); // ff
printf("%d\n", sizeof(char) == sizeof(unsigned char)); // 1
printf("%d\n", sizeof(char) == sizeof(unsigned int)); // 0
printf("%d\n", (char)~0 == (unsigned int)~0); // 1
}
Run Code Online (Sandbox Code Playgroud)
我正在努力理解为什么当char产生int- 大小的值时会unsigned char产生 -char大小的值。
当将小于的类型传递int给诸如 之类的可变参数函数时printf,它会被提升为type int。
在第一种情况下,您传递char的值为 -1,其表示形式(假设 2 的补码)为 0xff。它被提升为int值为 -1 且表示为 0xffffffff,因此这就是打印的内容。
在第二种情况下,您传递的unsigned char值为 255,其表示形式为 0xff。它被提升为int值 255 和表示形式 0x000000ff,因此这就是打印的内容(没有前导零)。