int main(void) {
char x;
int y=1280;
x=y;
printf("%d", x);
}
输出:0
我记得int = 4字节而char只是1字节。所以我们试图将4字节数据压缩到1字节空间,但为什么输出为0?
答案 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)
它还显示了两个补码。