有人可以解释为什么我得到这些输出吗?

Can Some one explain why I get these output?

我是c新手

我的问题。

Why do some numbers end up negative when the value was positive?

这是对您看到的输出的解释。 二进制的 1000 是 1111101000(10 位)并存储在 int(带符号的 32 位)

当您将其转换为 unsigned char(有 8 位)时,最高位会被“截断”。

所以你得到:11101000,十进制为 232

作为(有符号)字符,这些位被解释为负数,因为设置了第一个(有符号)位,在本例中为 -24。

去掉符号位后,1101000 = 104

MSB 的“值”是 128,所以您的计算机 104 - 128 = -24

(见https://en.wikipedia.org/wiki/Two%27s_complement

long 具有与 int 相同或更多的位,因此值不会改变。