ネコのために鐘は鳴る

寺院に住み着くパソコ〇好き

(雑記) int の範囲チェック速度 小ネタ

int型の整数の引数の範囲チェックで、0 から Size の範囲外だったら例外を投げる、のような範囲チェックはする機会が多いが、

int valueint Sizeに対して

if(value < 0 || value >= Size) throw new ArgumentOutOfRangeException();

よりも

if((uint)value >= (uint)Size) throw new ArgumentOutOfRangeException();

の方が演算が1回に減るため速い。これは C# に限った話ではなく整数に2の補数表現を使う処理系全般で使える。整数のビット表現を考えれば当然そうなる。同ビット幅のintunsigned intのキャスト自体になんらかのコストが発生する言語は別。

知っている人は当たり前に使うようなので。私は .NET Framework のソースコード眺めている時に見て知った。