30
符号なし整数乗算オーバーフローを検出するにはどうすればよいですか?
OverаэтотвопросестьответынаStack Overflowнарусском:МожнолинаязыкахC / C ++определитьцелочисленнееленееленее 私は、すべての解決策を見つけるためにC ++でプログラムを書いていたB = C、、BとCが一緒にすべての桁を使用し0-9回だけを。プログラムは、値の上にループとB、そして、それは上の桁カウントルーチンを毎回走っ、BとBの桁条件が満たされたかどうかを確認します。 しかし、スプリアス溶液を生成することができるbは整数制限をオーバーフロー。私は次のようなコードを使用してこれをチェックすることになりました: unsigned long b, c, c_test; ... c_test=c*b; // Possible overflow if (c_test/b != c) {/* There has been an overflow*/} else c=c_test; // No overflow オーバーフローをテストするより良い方法はありますか?一部のチップにはオーバーフローが発生したときに設定される内部フラグがあることは知っていますが、CまたはC ++を介してアクセスされることはありません。 符号付き intオーバーフローはCおよびC ++では未定義の動作であるため、実際にそれを引き起こさずに検出する必要があることに注意してください。追加前の署名付きintオーバーフローについては、C / C ++での署名付きオーバーフローの検出を参照してください。
618
c++
c
integer-overflow