2016-06-18 3 views
-5
unsigned long get_long(); //returns some crazy large unsigned long 

int i; 

i = get_long() % 20; 

可能な値は{0,1,2 ... 18,19}なので、右辺の値は常に整数に収まる大きさでなければなりません。Cでは、これを行うことはできますか? int i; i = get_long()%20;

コンパイラがそのunsigned longの右側を左側の整数に変換できると仮定できますか?

+1

'get_long'とは何ですか?それは標準的な機能ではありません。 See [ask] – Olaf

+0

「整数に収まるのに十分な大きさ」...何? –

+0

@WeatherVaneフォーマットが正しくありません。 –

答えて

1

はい、コンパイラが暗黙の変換あなたのケースでint=代入演算子のターゲットタイプですので、intunsigned long intから(キャストではない)を実行します。

INT_MAXは常に少なくとも32767であるため、値は[0, 19]です。

1

はい、コンパイラが標準に準拠している場合。

N1570 6.3.1.3符号付きと符号なし整数、第1項は言う:

を 値が新しい型で表現できるのであれば、整数型の値は、_Bool以外の整数型に変換される場合それは変わらない。

整数型のN1570 5.2.4.2.1サイズ> limits.hに<によれば、intは-32767から32767までの少なくともすべての整数を格納することができ、int 0〜19の範囲の整数の変換が安全です。

関連する問題