首页 > 解决方案 > 如何用一行在最小值和最大值之间循环整数

问题描述

我试图在一个范围内的最小值和最大值之间循环一个整数,例如0-2,这样如果我增加或减少该值,它总是在范围内。任何超过最大值的东西都应该捕捉到最小值,任何低于最小值的东西都应该捕捉到最大值。以下代码适用于递增,但不适用于递减:

current=(current+1)%(maximum+1);

是否有类似的技巧也适用于递减?

标签: c

解决方案


减量相当于maximum在 mod 工作时添加maximum + 1,所以只要负数current不能来自其他任何地方,maximum保持固定,并且current + maximum不能溢出整数类型,您就可以使用它:

current = (current + maximum) % (maximum + 1);

操作相同,只需选择1ormaximum在某种程度上很优雅,但请记住,分支版本可能更具可读性和更快:

/* increment */
current = current == maximum ? 0 : current + 1;

/* decrement */
current = current == 0 ? maximum : current - 1;

推荐阅读