算術オーバーフロー (またはアンダーフロー) を検出し、オーバーフロー カウントを取得する最も適切な方法は何でしょうか?
理解を容易にするために を使用しますがbyte
、これはint
やその他の基本的な整数型でも同じです。ここで、値が 240 で、それに 24 を足したいとします。明らかに算術オーバーフローです。キーワードを使用すると、checked
これは少なくとも簡単に検出できます...
byte value = 240;
try
{
checked
{
value += 24;
}
}
catch (OverflowException e)
{
// handle overflow, get overflow count via % etc.
}
...例外をスローすることによって。
これは私が現在使用しているものです。
ただし、この例外処理はあまり好きではありません。通常、例外は非常にコストがかかるため、最初から回避したいと考えています。とにかく、これはBoneheaded-Exceptionのように思えます。これを事前に検出するためにできる算数の魔法はありますか?