钳位无符号整数的正确方法是什么?
例如,说我有:
unsigned int ui = 5U;
现在我想从中减去一个值:
ui = Clamp(ui - MAGIC_VALUE, 0, 255);
如果MAGIC_VALUE> = 5,我希望ui包含0。
然而,我不能只是减去MAGIC_VALUE,因为如果MAGIC_VALUE>表达式ui - MAGIC_VALUE
将环绕到UINT_MAX
。 5并最终被夹紧到上限255.这与我想要的相反!
有什么技巧可以解决这个问题吗?