递减和模数 - 如何在一行代码中减少负值

Jak*_*ruk 3 c++ modulo

我发现增加有限变量的方法非常温和,只需:

++i %= range;
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个技巧不适用于减量,因为-1 % v == -1.

如何在C++中改进这一点?

M.M*_*M.M 7

为了避免负模数行为,您可以先将其设为正数:

i = (i - 1 + range) % range;
Run Code Online (Sandbox Code Playgroud)

但是,如果range大于INT_MAX的一半,这是不好的.(或任何类型i).

这似乎更简单:

i = (i ? i : range) - 1;
Run Code Online (Sandbox Code Playgroud)