27

C言語標準のデータ型昇格規則について質問があります。C99 は次のように述べています。

C 整数昇格では、「int が元の型のすべての値を表すことができる場合、その値は int に変換されます。それ以外の場合は、unsigned int に変換されます」必要があります。

unsigned int私の質問は、とが存在する C 言語式の場合signed int、どの型がどの型に昇格されるかです。

たとえば、 (値より大きい値)intのすべての値を表すことはできませんが、-ve 値を表すことはできません。そのような場合、どの型が何に昇格されますか?unsigned intMAX_INTunsigned int

4

2 に答える 2

26

以下があなたの質問に答えると思います:

6.3.1.3 符号付きおよび符号なし整数

1整数型の値を _Bool 以外の別の整数型に変換する場合、その値が新しい型で表現できる場合、その値は変更されません。

2それ以外の場合、新しい型が符号なしの場合、値が新しい型の範囲内になるまで、新しい型で表現できる最大値よりも 1 つ多い値を繰り返し加算または減算することによって、値が変換されます。

3それ以外の場合、新しい型は署名され、値を表現できません。結果が実装定義であるか、実装定義のシグナルが発生します。

于 2010-02-17T12:58:20.023 に答える