<分区>
我在将 int 保存到 char 数组并将其转换回来时偶然发现了这个问题。我使用位移位和逻辑或,但我的结果以最低有效位之后的所有字节为 0xFF。
我的问题是:考虑这个例子
#include <stdio.h>
int main() {
char c1 = 0x86;
unsigned char c2 = 0x86;
unsigned int i1 = 0, i2 = 0;
i1 = (unsigned int) c1;
i2 = (unsigned int) c2;
printf("%x-%x\n", i1, i2);
}
为什么输出是ffffff86-86
?为什么 char 的所有高位都设置为 1?
我确信有一个非常简单的答案,但我想不出一个足够具体的查询来在谷歌上找到它。