効率を高めた整数範囲の包含の決定
整数が指定された範囲内にあるかどうかを決定することは、多くのアプリケーションにとって重要です。従来、このアプローチには、論理演算子 (>= や
コード スニペットを考えてみましょう:
if ((unsigned)(number - lower) < (upper - lower)) in_range(number);
ここでは、整数値は、 (署名なし) キャスト。この変換は、数値が負の場合に符号ビットを反転し、基本的に整数直線を数直線の原点に変換します。
項 (上位 - 下位) は範囲の差を表します。ループの外で計算されると定数値になり、実行速度がさらに最適化されます。
重要な洞察は、符号なし整数がどのように扱われるかにあります。負の値は、符号なしとして解釈されると、正の値よりも大きくなります。したがって、(unsigned)(number - lower) が負と評価される場合、number は lower の下にあります。逆に、(上限 - 下限) よりも大きいと評価される場合、数値は上限を超えます。
この方法には、従来のアプローチに比べていくつかの利点があります。
実際のシナリオでは、提供された更新されたコードで観察される高速化によって示されているように、この最適化によりパフォーマンスが大幅に向上する可能性があります。強化されたコードは、ボックス ブラー関数の一般的な操作である正方形内の円内のピクセルを効果的に制限します。
以上が符号なし整数変換で整数範囲チェックを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。