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