4

钳制无符号整数的正确方法是什么?

例如,假设我有:

 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。这与我想要的相反!

有什么技巧可以解决这个问题吗?

4

0 回答 0