2
unsigned char c0=255,c1=1;
char c2=c0+c1;   //(1)

没有任何警告(/W4),c2 为 0

int i=c0+c1;    //(2)

没有任何警告(/W4),我是 256

表达式(c0+c1)的类型是什么?如果是 unsigned char,为什么不是 (2) 中的 0。如果是 int,为什么 (1) 中没有警告。

它似乎与“整数提升”有关。

帮助!!!

4

2 回答 2

2
unsigned char c0=255,c1=1;
char c2=c0+c1;

c0 + c1是类型int,它的计算结果为256. 此intchar在分配给 时转换为c2。不需要警告,因为您始终可以分配任何不同算术类型的操作数。(从技术上讲,这是一个初始化,但相同的类型和转换约束适用于赋值和初始化)。

int i=c0+c1;

c0 + c1仍然是类型int,并且在分配期间没有发生转换。

于 2012-05-08T19:18:17.090 回答
0

在情况 1 中,类型是unsigned char,因为您已将 c2 的类型指定为 unsigned char,而在情况 2 中,类型是int,因为您已将 i 的类型指定为 int。

于 2012-05-08T19:00:00.030 回答