5

次のコード行に関する電子メールの議論を読んでいます。

p = (unsigned char)random();

random 関数は long を返しますが、タイプキャストが LSB ではなく MSB を取る可能性があるため、これは安全ではないと誰かが言います。x86では型キャストがLSBを返すことは知っていますが、これが実際にANSI Cによって義務付けられているのか、それとも実装固有の「未定義の動作」の1つであるかについての情報は見つかりません.

4

1 に答える 1

6

これは C 標準で指定されています。

6.3.1.3p2 の C99 は次のように述べています。

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

2 の補数システムでは、最下位ビットを取ることを意味します。

于 2013-08-06T23:59:08.273 に答える