假設我有一個從零開始的范圍,例如
[0, 1, 2, 3, 4]
這些本質上是大小 = 5 的陣列的索引。是否可以使用有符號整數變數在該范圍內連續向上或向下回圈?
通過向上或向下,我的意思是允許變數執行任意多個遞增或遞減操作:
index;
--index;
因此,例如減少索引應該映射到以下值:
index = 2;
while (/*...*/)
{
--index;
index_in_range(index, 5);
}
該函式index_in_range(index, 5)將輸出:
[1, 0, 4, 3, 2, 1, 0, 4, 3, 2, 1, .... and so on]
正面的情況只是對范圍大小的模運算,但對于負面的情況,我無法弄清楚映射是如何進行的。
uj5u.com熱心網友回復:
C 做出了一個非常糟糕的決定,%即向零舍入,而不是一個簡單的下限,所以數學比它必須的更笨拙。不過,基本上,你想要(index % size size) % size. 該代碼首先切斷負或正倍數以將索引帶入范圍(-size, size),添加size以將其映射到(0,size*2),最后%將其映射到[0,size)。
如果size在編譯時未知,則將第一個模數之后的所有內容替換為條件: 可能會更高效index %= size; if(index < 0) index = size;。
uj5u.com熱心網友回復:
增加
index = (index 1)%sz;
減少
index = (index-1 sz)%sz
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/415935.html
標籤:
上一篇:交換2個排列的子序列的演算法
