2017-07-15 77 views
2

我需要在無限循環中有一個有限數(0到3)的循環。所以我用這個代碼:是否有任何方法來組織「循環」(循環)數字在C + +?

int moveOp = 0; 

while (1) { 
//some operations with moveOp here 
moveOp++; 

if(moveOp>3) { 
     moveOp = 0; 
    } 

} 

但也許有有一個數據類型與操作者增加跳轉到零,無需手寫狀態的方法?

+1

出了什麼問題'moveOp =(moveOp + 1)&3'或'%4'? – Leeor

+0

在這種特殊情況下,您可以在每次迭代中執行'moveOp &= 3;'而不是'if'(因此您避免了一個分支,這通常對性能很好),但這不是一個通用方法,可能不是很清楚。 –

回答

2

這會工作:

moveOp = (moveOp + 1) % N; 
1

我覺得Modulus運算符是你在找什麼。 下面是示例,你如何使用它:

int moveOp = 0; 
int Num = 4; 

while (1) { 
     ++moveOp; 
     moveOp = moveOp%Num; 
} 
2

如果NUM是2電源就可以使用該位域以及

struct { 
    unsigned moveOp:2; 
}m; 

m.moveOp++; 
2
for(int i = 0; ; i = (i + 1) % 4) { 
    // your code goes here 
}