【发布时间】:2016-02-13 08:33:50
【问题描述】:
递增和回零很容易:
i = (i + 1) % Max;
但递减并不是那么直接。基本上要减少和包装你通常会发现这样的代码:
i--;
if (i < 0)
i = Max;
如果不使用 if 语句,我们如何编写前面的代码?
我知道可能会涉及到按位运算符。通常,当我遇到此类问题时,我会尝试提出一些包含两项 A 和 B 的方程式,然后尝试找到这两项的实际值。例如:
i = A + B
如果i 在]0, Max] 范围内,那么我们会得到:
i = 0 + B 和 B = i-1
否则如果i == 0:
i = A + 0 和 A = Max
类似地我们可以这样写:
i = i == 0 ? Max : i - 1;
如何在没有任何 if 或三元运算符的情况下编写前面的等式?我尝试了很多按位运算和不同的算术组合,但无济于事。
有什么想法吗?
【问题讨论】:
-
嗯,不是吗?那是行不通的。说
Max = 10和i = 0,然后i = -1 % 10仍然等于-1
标签: c bit-manipulation bitwise-operators decrement