拥有以下代码:
unsigned char c1 = -55;
1。)会发生什么? c1
变量是隐式转换为unsigned int
,还是unsigned
被忽略且c1
仍为signed int
?
2。)为什么这两个陈述:
if (c1 != -55)
printf("!=");
和
if (c1 != 55)
printf("!=");
打印!=
?
答案 0 :(得分:6)
以上都不是。 c1
的类型为unsigned char
;等号右侧没有任何东西可以改变这一点。值-55(其类型为int
)将通过赋值转换为unsigned char
,如果通过向其添加256,则c1
将初始化为201. 1 您可以通过编写
printf("%u\n", c1);
初始化后。
这两项比较首先将c1
重新转换为至int
。 201可在int
中表示,因此值不会更改。 201不等于55,也不等于-55。
1 从技术上讲,增加的值是UCHAR_MAX+1
,但是除了256以外,它是非常非常罕见的。标准中列出了将负数从有符号转换为无符号的效果。