有人可以解释为什么我得到这些输出吗?
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 相同或更多的位,因此值不会改变。
我是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 相同或更多的位,因此值不会改变。