(雑記) int の範囲チェック速度 小ネタ
int
型の整数の引数の範囲チェックで、0 から Size の範囲外だったら例外を投げる、のような範囲チェックはする機会が多いが、
int value
とint Size
に対して
if(value < 0 || value >= Size) throw new ArgumentOutOfRangeException();
よりも
if((uint)value >= (uint)Size) throw new ArgumentOutOfRangeException();
の方が演算が1回に減るため速い。これは C# に限った話ではなく整数に2の補数表現を使う処理系全般で使える。整数のビット表現を考えれば当然そうなる。同ビット幅のint
とunsigned int
のキャスト自体になんらかのコストが発生する言語は別。