C 是否在不使用if语句的情况下递减值并换回最大值?
递增并换回零很容易:C 是否在不使用if语句的情况下递减值并换回最大值?,c,bit-manipulation,bitwise-operators,decrement,C,Bit Manipulation,Bitwise Operators,Decrement,递增并换回零很容易: i = (i + 1) % Max; 但递减并不是那么简单。基本上,对于减量和换行,您通常会发现如下代码: i--; if (i < 0) i = Max; 如果i在]0,Max]范围内,则我们将得到: i=0+B和B=i-1 否则,如果i==0: i=A+0和A=Max 同样,我们可以写: i = i == 0 ? Max : i - 1; 如何在没有ifs或三元运算符的情况下写出前面的方程?我尝试了很多位操作和不同的算术组合,但都没有成功 有什么想法吗
i = (i + 1) % Max;
但递减并不是那么简单。基本上,对于减量和换行,您通常会发现如下代码:
i--;
if (i < 0)
i = Max;
如果i
在]0,Max]
范围内,则我们将得到:
i=0+B
和B=i-1
否则,如果i==0
:
i=A+0
和A=Max
同样,我们可以写:
i = i == 0 ? Max : i - 1;
如何在没有ifs或三元运算符的情况下写出前面的方程?我尝试了很多位操作和不同的算术组合,但都没有成功
有什么想法吗?您可以根据需要修改它
var偏移量,
最大值=10,
str='',
计数器=document.getElementById('counter');
对于(变量i=0;i<(max*max);i++){
偏移量=((最大+i)%max);
str+=(最大偏移量)+“
”;
}
counter.innerHTML=str代码>
只要0um就可以工作,不是吗?那不行。说Max=10
和i=0
,然后i=-1%10
这仍然等于-1
,如果Max>INTMAX/2,这可能会溢出,但是对于较小的Max值很好。谢谢回答。然而,我想返回到Max
,这将返回到Max-1
。但是考虑到大多数使用情况都是索引递减,通常max是数组的计数,我们希望返回到count-1,在这种情况下,这非常有效。我试图通过在整个结果中添加+1来修改代码,使其换行为Max
,但现在当0
时,它不会递减I
,对不起,我的答案是增量示例的精确递减模拟,(I+1)%Max
。更仔细地阅读你的文章的其余部分,看起来你想要的是(Max-i)%(Max+1)
,也就是说你想要在Max+1
值Max,Max-1,…,0,Max,Max,Max-1,…@Chris Dodd是的,它也可能比OP呈现的三元运算符代码慢,除非Max(或者它是Max+1)是二的幂,谢谢。对,所以我们也可以写i=(i-1+Max)%Max代码>哪个更清楚一点。那么(Max-i)%(Max+i)
呢?这背后的逻辑是什么?嗯,你能解释一下这是怎么回事吗?在我看来,(max+i)%max
只是i%max
,它为循环变量i
提供了相同的值,因此offset=i
,然后max-offset
就是max-i
。如果我将I
更改为I
和offset=I
,我将得到相同的输出。很抱歉看不出这有什么帮助也许我遗漏了一些明显的东西。我喜欢“运行代码片段”功能,这是我第一次看到它!
i = i == 0 ? Max : i - 1;
i = (Max-1 + i)%Max