int到char类型转换

时间:2017-07-27 18:00:20

标签: c

我有以下代码片段

#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。谢谢。

1 个答案:

答案 0 :(得分:-3)

char c1 = i1;是未定义的行为。 i1是399,需要至少2个字节才能表示,而char是1个字节。您所拥有的输出只是将二进制的399 = 110001111截断为1字节:10001111 = signed -133但是因为它是UB,所以它也可以是其他任何东西

第四个只是数字的十六进制表示