1

演算子が異なるタイプの2つのオペランドで使用される場合は常に、結果のタイプが2つのオペランド間の「支配的な」タイプになることを私は知っています。
たとえば、の結果は
(int) + (float)
floatになります。
別の例は次のようになります:
(char) + (double) そして結果はdoubleです。

これは、符号付き変数と符号付き変数のみに当てはまります。

しかし、符号付き変数と符号なし変数を含めるとどうなりますか?

4

1 に答える 1

4

詳細はC11、6.3.1.8にあります。要約する:

  • unsignedタイプが同等以上の場合、signedタイプはunsignedに変換されます。

  • それ以外の場合、符号付き型が符号なし型のすべての値を保持できる場合、符号なし型は符号付き型に変換されます。

  • それ以外の場合は、両方が符号付きタイプに対応する符号なしバージョンに変換されます。

「広い」とは、「コンバージョンランクが高い」という意味です。

例(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)
于 2012-11-14T02:08:25.263 に答える