【发布时间】:2020-07-05 05:24:32
【问题描述】:
您好,我目前正在学习 C,但有些东西我完全不明白。 首先有人告诉我,如果我这样做:
unsigned int c2 = -1;
printf("c2 = %u\n", c2);
根据这张表,它会输出 255:
但我得到一个奇怪的结果:c2 = 4294967295
现在更奇怪的是这有效:
unsigned char c2 = -1;
printf("c2 = %d\n", c2);
但我不明白,因为char 是,好吧,char,为什么它甚至打印任何东西?因为这里的说明符是%d 而不是%u,因为它应该用于无符号类型。
【问题讨论】:
-
在 C 中,
char也是数字类型 -
int(还有unsigned int)通常是一个32位整数类型。您引用的表仅显示 8 位。尝试使用更多位来推断模式... -
继续该表 24 位,你就有答案了
-
关于
%d适用于char,这是因为小于int的类型值是promoted到int。 -
@chux 我在看第一个
printf。我应该早点删除那条评论。
标签: c memory char unsigned integer-promotion