[英]How to code a modulo (%) operator in C/C++/Obj-C that handles negative numbers
[英]decrementation and modulo - how to decrement negative value in one line of code
我发现增加有限变量的方法非常温和,只需:
++i %= range;
不幸的是,这个技巧不适用于减量,因为-1 % v == -1
。
如何在C ++中改进这一点?
为了避免负模数行为,您可以先将其设为正数:
i = (i - 1 + range) % range;
但是,如果range
大于INT_MAX的一半,这是不好的。 (或者i
任何类型)。
这似乎更简单:
i = (i ? i : range) - 1;
我的理解是你想要相同的[0,范围]区间,你只想按降序顺序浏览它。
在任意时期内做的相当复杂,但对于2的幂(不需要是常数),你可以使用
--i; i &= unsigned(range - 1);
这类似于正面版本的“优化”,
++i; i &= unsigned(range - 1);
在任意范围内执行此操作的一种简单方法是使用第二个变量
++tmp; i = range - 1 - (tmp %= range);
此代码应该适用于通过区间[0,范围]递减i
--i = (i > 0) * (i % range);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.