4

以下は動作することが保証されていますか、または実装が定義されていますか?

unsigned int a = 4294967294;
signed int b = a;

の値b-2gcc にあります。

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

4

2 に答える 2

8

a値の変換signed intは実装定義です(6.3.1.3p3のために正しく言及したように)。たとえば、一部のシステムでは、INT_MAX(飽和変換) の可能性があります。

実装の動作についてgccは、次のように定義されています。

値をその型のオブジェクトで表すことができない場合に、整数を符号付き整数型に変換した結果、またはそれによって生成されたシグナル (C90 6.2.1.2、C99 6.3.1.3)。

幅 N の型への変換の場合、値は型の範囲内になるように 2^N を法として減らされます。信号は発生しません。

http://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html

于 2012-11-29T23:09:05.100 に答える