加算、乗算または減算のような任意の演算がオーバーフローを引き起こすことができれば、我々はどのようにチェックしますか?
チェック
答えて
オペランドのサイズを最初に確認し、std::numeric_limits
を使用します。例えば、追加のために:
#include <limits>
unsigned int a, b; // from somewhere
unsigned int diff = std::numeric_limits<unsigned int>::max() - a;
if (diff < b) { /* error, cannot add a + b */ }
あなたは、一般的にかつ確実に後の実際の算術エラーを検出することができない、あなたはすべての前にチェックをしなければならないので。
このアプローチを簡単にテンプレート化して、任意の数値タイプで使用できるようにすることができます。
こんにちは、いくつかのロジックを使用し、この問題を解決するために任意のテンプレートを使用せずに任意のメソッドがありますか? – pravs
私はあなたが 'a + = b; if(a
@pravs: 'std :: numeric_limits
- 1. チェック/チェックを外しキー
- 2. チェック
- 3. チェック
- 4. チェック
- 5. チェック
- 6. チェック
- 7. チェック
- 8. チェック
- 9. チェック
- 10. チェック
- 11. チェック -
- 12. チェック
- 13. チェック
- 14. チェック
- 15. チェックボックス/トグルボタンのチェック/チェックを外す
- 16. jqueryのチェック/チェックを外しイベントトリガー
- 17. jQueryチェックボックスのチェック/チェックを外す
- 18. チェックボックスのチェック/非チェックを防止する
- 19. チェックが
- 20. チェックは
- 21. チェック値
- 22. MAXLENGTHチェック
- 23. はチェック
- 24. チェックXPATH
- 25. チェック - スカラ
- 26. ジェネリック型のチェック
- 27. AndroidチェックSMS
- 28. DjangoのSQLチェック
- 29. チェック二列
- 30. の.htaccessチェック
私の質問は特に符号なし整数に向いています – pravs
厳密に言えば、符号なし算術はオーバーフローしません。それはよく定義された方法でラップアラウンドします。しかし、それは単語 "オーバーフロー"の意味についてのちょっとした疑問であり、あなたの質問に答えることはできません。 –