【问题标题】:Conversions between types in CC中类型之间的转换
【发布时间】:2012-11-02 13:02:58
【问题描述】:
我知道,每当一个运算符用于具有不同类型的两个操作数时,结果类型将是两个操作数之间的“显性”类型。
比如
(int) + (float)的结果
将是一个浮动。
另一个例子是:
(char) + (double)
结果是双倍的。
这对于有符号变量是正确的,并且只适用于有符号变量。
但是当我们将有符号变量与无符号变量结合起来时会发生什么?
【问题讨论】:
标签:
c
types
operators
unsigned
signed
【解决方案1】:
详细信息在 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)