0

[0..255]に制限されているピクセルの明るさのコードがあります。そして、それは何らかの理由で評価されているので、私は範囲外の価値を得ることができます。できます

(if x>maxValue) x = maxValue;

また

 x = min(x, MaxValue);

また

(x > MaxValue) ? MaxValue : x;

しかし、私は良い方法は何だろうか?より少ない比較と優れたコードスタイルで値を制限するにはどうすればよいですか?

4

5 に答える 5

2

xのintの代わりにunsignedcharを使用します。charは[0、255]に制限されています。オーバーフローをチェックする必要があるため、これは少し注意が必要です。

于 2012-09-20T12:50:58.283 に答える
1

より少ない比較と優れたコードスタイルで値を制限するにはどうすればよいですか?

1つの比較は少なくとも、それ以下は比較がないことを意味します。これが必要な場合は、分岐せずに最小計算を見てください。

良いスタイルのために、これは最高です-

if (x > maxValue)
{
    x = maxValue;
}
于 2012-09-20T13:13:23.650 に答える
0

優れたコーディングスタイルに関しては、この値の境界要件を管理するための独自のクラスを作成できます。代入演算子をオーバーロードすると、そこで比較を行うことができます。

編集: 代わりに、すべてのコードを1つの関数に入れることができると思います。しかし、クラスインスタンスとのやり取りの方が良いと思います。

BoundedInt x;
x = 300;
x.value(); // x == 255
于 2012-09-20T13:52:16.547 に答える
0
inline long clamp(long x, long min, long max){
    return x>max ? max : (x<min ? min : x);
}

0から255までの値のみを受け入れ、暗黙的にintにキャストできる新しいクラスを作成できますが、clampやmaxなどを使用するだけで十分です。

于 2012-09-20T12:56:27.797 に答える
0

私は推測します:

(x > MaxValue) ? MaxValue : x;

と同等です:

(if x>maxValue) x = maxValue;
else x = x;

最適化されるなど、自己割り当てなどで停止する可能性が高いことはわかっています。したがって、本質的には、最初の場合と同じですが、シンタックスシュガーコーティングだけです。

min型の安全性を提供し、混合型の比較を避けるのに役立つので、私は使用します。

于 2012-09-20T13:12:12.473 に答える