【发布时间】:2018-12-28 16:24:21
【问题描述】:
我尝试在 C 中使用数据类型。我的第一个问题是 printf() 使用 unsigned int 显示负值。我用 %u 而不是 %i 解决了这个问题。
但是 unsigned char 仍然适用于 %i,这怎么可能?
#include <stdio.h>
int main(void) {
unsigned int a;
unsigned char b;
a = -7;
b = -1
printf("a=%u\nb=%i\n", a, b);
return 0;
}
【问题讨论】:
-
无论如何,大多数可打印的字符值都低于 127,因此您可能不会看到任何负值。最后一位(值 128 及以上)将编码负值。
-
而且 %i 的范围(32 位)比一个字节大,所以无论如何你都不会跳过那个符号位。
-
仅供参考,您可能会发现 this question 很有趣
-
另一种说法:最好避免未定义的行为!...您能猜出当您使用较大的数据类型和较小的模式时会发生什么,例如, 将
double与%f一起使用(注意: 不适用于scanf())...?