【问题标题】:How to cycle an integer between a minimum and maximum value with one line [duplicate]如何用一行在最小值和最大值之间循环整数[重复]
【发布时间】:2021-01-10 04:53:54
【问题描述】:

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

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

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

【问题讨论】:

  • 目前的代码执行增量并将所有内容包装在一起时,您的要求并不十分清楚。如果您希望在某个范围内强制一个值(可能已在代码上方某处更改),双三元运算符可以做到这一点。
  • inc = 1-1current=(current+inc +maximum+1)%(maximum+1);

标签: c


【解决方案1】:

递减相当于在工作模式maximum + 1时添加maximum,所以只要负数current不能来自其他任何地方,maximum保持不变,current + maximum不能溢出整数类型,你可以使用它:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多