rand() + rand() が負の数を生成するのはなぜですか? 質問する

rand() + rand() が負の数を生成するのはなぜですか? 質問する

rand()ライブラリ関数がループ内で一度だけ呼び出されると、ほぼ常に正の数値が生成されることに気づきました。

for (i = 0; i < 100; i++) {
    printf("%d\n", rand());
}

しかし、2 つの呼び出しを追加するとrand()、生成される数値に負の数が多くなります。

for (i = 0; i < 100; i++) {
    printf("%d = %d\n", rand(), (rand() + rand()));
}

2 番目のケースで負の数値が表示される理由を誰か説明してもらえますか?

PS: ループの前にシードを として初期化しますsrand(time(NULL))

ベストアンサー1

rand()0は~の間の整数を返すように定義されていますRAND_MAX

rand() + rand()

オーバーフローする可能性があります。あなたが観察しているものは、おそらく未定義の動作整数オーバーフローによって発生します。

おすすめ記事