符号なし整数をクランプする正しい方法は何ですか?
たとえば、私が持っているとしましょう:
unsigned int ui = 5U;
今、私はそれから値を減算したい:
ui = Clamp(ui - MAGIC_VALUE, 0, 255);
MAGIC_VALUE >= 5 の場合、ui に 0 を含めたいと思います。
ただし、式ui - MAGIC_VALUE
が if MAGIC_VALUE > 5 にラップアラウンドしUINT_MAX
、上限の 255 にクランプされるため、MAGIC_VALUE を減算することはできません。これは、私が望むものとは逆です!
これに対処するためのトリックはありますか?