c - 如何用一行在最小值和最大值之间循环整数
问题描述
我试图在一个范围内的最小值和最大值之间循环一个整数,例如0-2,这样如果我增加或减少该值,它总是在范围内。任何超过最大值的东西都应该捕捉到最小值,任何低于最小值的东西都应该捕捉到最大值。以下代码适用于递增,但不适用于递减:
current=(current+1)%(maximum+1);
是否有类似的技巧也适用于递减?
解决方案
减量相当于maximum
在 mod 工作时添加maximum + 1
,所以只要负数current
不能来自其他任何地方,maximum
保持固定,并且current + maximum
不能溢出整数类型,您就可以使用它:
current = (current + maximum) % (maximum + 1);
操作相同,只需选择1
ormaximum
在某种程度上很优雅,但请记住,分支版本可能更具可读性和更快:
/* increment */
current = current == maximum ? 0 : current + 1;
/* decrement */
current = current == 0 ? maximum : current - 1;
推荐阅读
- html - 如何将 div 隐藏在另一个透明的 div 下但保持身体可见?
- scala - Scala,unsafeRunSync - 为什么每次都需要调用它?
- java - 将现有的 Maven Eclipse 项目上传到 GitHub
- laravel - Laravel ER 图生成器 getAllModelsFromEachDirectory()
- c# - 从另一个页面调用堆栈布局
- java - “如何将”纯文本算法转换为伪代码
- global-variables - Airflow 中的全局变量
- python - 如何在不导入任何模块的情况下将文本包装成一段 x 字符?
- pagination - Google 如何避免更改影响分页的算法?
- python - 将公式作为参数传递给函数/列表理解