2016-08-14 27 views
3

私は少しこれを答えようと試みていましたが、明確な答えを見つけることができませんでした。
は、私は彼がサイドノートとして書いたthis答えました:符号なしlong longからunsigned intに変換する

ルールは、符号なしのタイプによって異なりますが、 符号付きまたは符号なし整数を符号なし型に変換した結果は明確に定義されています。

したがって、とは何ですか?の動作は何ですか?
unsigned long longからunsigned intに変換するとき、定義された動作はありますか? 32のMSBを切り捨てるだけですか? (私に32LSBを残す)。
私のシステムでは、sizeof(unsigned int)4であり、sizeof(unsigned long long)8であるとします。
キャスティングなしで割り当てる場合とキャスティングで割り当てる場合の動作は異なりますか?

答えて

4

標準は言う:

6.3.1.3符号付きおよび符号なし整数値 により表すことができる場合、整数型の値は、_Bool以外の整数型に変換され
1新しいタイプ、それは変更されていません。
新しい型が符号なしの場合は、 を繰り返し追加するか、値が新しい型の範囲になるまで新しい型に表現できる最大値の1を引いて値を変換します。 49)
それ以外の場合は、新しい型に符号が付けられ、その値は で表すことはできません。結果が実装によって定義されるか、または実装定義の信号が生成されます。

ポイント2はモジュロ演算を表し、この場合はMSBをカットオフするのと同じ効果があります。 (新しいタイプの最大値に1を加えたものが数値ベースの累乗である場合と同じ効果があります)

キャスティングを使用すると違いはありません。

+0

標準を引用して、特定のケースに答えるのに感謝します。 –

関連する問題