重複の可能性:
幅の広い整数に代入するときの C 整数オーバーフローの動作
グーグルでこれに関する明確な答えが見つかりませんでした。次の 2 つの式があるとします。
int16_t a16 = 100;
int16_t b16 = 2000;
int16_t result16 = (a16 * b16) / a16;
int8_t a8 = 100;
int8_t b8 = 20;
int8_t result8 = (a8* b8) / a8;
式(a16 * b16) / a16
and を評価するとき(a8 * b8) / a8
、それらは評価中に常に昇格さint
れ、最終結果は代入の直前に目的の型 (int16_t
または) に変換されますか、それともこの整数昇格は完全にオプションですか? int8_t
整数式の評価中の整数昇格は常に行われますか、それとも単純に許可されますか?
常に行われている場合、2 つの操作がオーバーフローしないことが期待できます ( int
32 ビットであると仮定します)。実行のみが許可されている (必須ではない) 場合、操作がオーバーフローする可能性があります。挙動をよく知りたいです。