以下代码试图演示什么?

时间:2009-09-26 05:27:09

标签: c

int main(void) {
    char x;
    int y=1280;
    x=y;
    printf("%d", x);
}
  

输出:0

我记得int = 4字节而char只是1字节。所以我们试图将4字节数据压缩到1字节空间,但为什么输出为0?

3 个答案:

答案 0 :(得分:2)

整数类型是C / C ++编译器中confusing最多的。在你的情况下,答案很简单,代码显示溢出。 Char是一个8位数据类型,只能有0-255和256的值,需要9位表示溢出为0.这里1280 = 256 * 5,最低有效8位为零,因此当分配给char时值为0.看看MSB与LSB系统的输出结果会很有趣。

答案 1 :(得分:1)

从较宽的类型转换为较窄的类型,仅在您遵守规则时才有效。尽管如此,你仍然受到实施的支配。所以,从技术上讲,发生的是编译器将y的第一个字节分配给x!如果y保存多个字节的信息,则会丢失。例如,当您有y == 0xFFFFFFFF => x = 0xFF

答案 2 :(得分:0)

它还显示了两个补码。