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)中没有警告。
似乎与“整体推广”有关。
帮助!!!
答案 0 :(得分:2)
unsigned char c0=255,c1=1;
char c2=c0+c1;
c0 + c1
的类型为int
,其评估结果为256
。将int
值分配给char
时,此c2
值会转换为int i=c0+c1;
。不需要警告,因为您始终可以分配任何不同算术类型的操作数。 (从技术上讲,它是一个初始化,但相同的类型和转换约束适用于赋值和初始化)。
c0 + c1
int
仍然是{{1}}类型,并且在分配期间不会发生转换。
答案 1 :(得分:0)
在案例1中,类型为 unsigned char ,因为您已将c2的类型指定为unsigned char,而在案例2中,类型为 int ,因为您已指定i的类型为int。