我知道只要操作符在两个具有不同类型的操作数上使用,结果类型就是两个操作数之间的“显性”类型。
例如,结果为
(int) + (float)
将是一个浮动。
另一个例子是:
(char) + (double)
结果是双倍的。
对于有符号变量和仅有符号变量,这是正确的。
但是当我们将带有无符号变量的带符号变量包含在内时会发生什么?
答案 0 :(得分:4)
详情见C11,6.3.1.8。总结一下:
如果无符号类型等于或宽,则签名类型将转换为无符号类型。
否则,如果签名类型可以包含无符号类型的所有值,则无符号类型将转换为有符号类型。
否则,两者都会转换为与签名类型对应的无符号版本。
“更宽”是指“转化率更高”。
示例(在某些特定架构上,例如sizeof(short) == 2
和sizeof(long) == sizeof(unsigned int) = 4
):
int + unsigned int => unsigned int (first rule, equal rank)
long + unsigned short => long (second rule, long contains u. short)
long + unsigned int => unsigned long (third rule)