1

我知道,每当运算符用于具有不同类型的两个操作数时,结果类型将是两个操作数之间的“主导”类型。
例如,结果
(int) + (float)
将是一个浮点数。
另一个例子是:
(char) + (double) 结果是双倍的。

这对于有符号变量是正确的,并且仅适用于有符号变量。

但是当我们将有符号变量与无符号变量结合起来时会发生什么?

4

1 回答 1

4

详细信息在 C11, 6.3.1.8 中。总结一下:

  • 如果无符号类型等于或宽,则将有符号类型转换为无符号。

  • 否则,如果有符号类型可以保存无符号类型的所有值,则将无符号类型转换为有符号类型。

  • 否则,两者都转换为对应于有符号类型的无符号版本。

“更广泛”是指“具有更高的转化排名”。

示例(在某些特定架构上,例如sizeof(short) == 2and 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)
于 2012-11-14T02:08:25.263 回答