我有以下代码片段
#include <stdio.h>
int main()
{
int i1 = 0x18f;
char c1 = i1;
char c2 = 15;
unsigned short s1 = 0174670;
printf("1) %o\n", i1);
printf("2) %d\n", c1);
i1 = c1;
printf("3) %d\n", i1 & c2);
printf("4) %x\n", s1 ^= 0x5555);
}
使用此输出
1) 617
2) -113
3) 15
4) aced
有人可以解释为什么第二和第四输出分别出现在-113和aced。谢谢。
答案 0 :(得分:-3)
char c1 = i1;
是未定义的行为。 i1
是399,需要至少2个字节才能表示,而char是1个字节。您所拥有的输出只是将二进制的399 = 110001111截断为1字节:10001111 = signed -133但是因为它是UB,所以它也可以是其他任何东西
第四个只是数字的十六进制表示