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) 中没有警告。
它似乎与“整数提升”有关。
帮助!!!
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) 中没有警告。
它似乎与“整数提升”有关。
帮助!!!
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 中,类型是unsigned char,因为您已将 c2 的类型指定为 unsigned char,而在情况 2 中,类型是int,因为您已将 i 的类型指定为 int。