钳位无符号整数

use*_*280 5 c++ unsigned

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

例如,假设我有:

 unsigned int ui = 5U;
Run Code Online (Sandbox Code Playgroud)

现在我想从中减去一个值:

ui = Clamp(ui - MAGIC_VALUE, 0, 255);
Run Code Online (Sandbox Code Playgroud)

如果 MAGIC_VALUE >= 5,我希望 ui 包含 0。

但是,我不能只减去 MAGIC_VALUE,因为如果 MAGIC_VALUE > 5,表达式ui - MAGIC_VALUE将回绕到UINT_MAX上限,最终被限制为上限 255。这与我想要的相反!

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