隐式字符转换

时间:2016-12-23 17:45:39

标签: c++

拥有以下代码:

unsigned char c1 = -55;

1。)会发生什么? c1变量是隐式转换为unsigned int,还是unsigned被忽略且c1仍为signed int

2。)为什么这两个陈述:

if (c1 != -55)  
    printf("!=");

if (c1 != 55)  
    printf("!=");

打印!=

1 个答案:

答案 0 :(得分:6)

  1. 以上都不是。 c1的类型为unsigned char;等号右侧没有任何东西可以改变这一点。值-55(其类型为int)将通过赋值转换为unsigned char,如果通过向其添加256,则c1将初始化为201. 1 您可以通过编写

    来自行查看
    printf("%u\n", c1);
    

    初始化后。

  2. 这两项比较首先将c1 重新转换为int。 201可在int中表示,因此值不会更改。 201不等于55,也不等于-55。

  3. 1 从技术上讲,增加的值是UCHAR_MAX+1,但是除了256以外,它是非常非常罕见的。标准中列出了将负数从有符号转换为无符号的效果。