2011-04-29 75 views
0

我需要我的整數計數器具有從1到6包含在時尚環繞的值。即從1開始,我數到6並回到1.我想知道是否有可能實現某種按位邏輯。當然,這是瑣碎如下if語句,但我想知道一個襯墊:)是否可以使用按位運算來限制int值(設置範圍)?

int counter = 1; 

for... 
    do something 
    if (counter++ == 7) counter = 1; 

增加: 這就是爲什麼我要1個班輪:

byte output = (byte)((inputByte & 0xF8) | counter++); 
+2

爲什麼你想使用按位邏輯的東西呢?那會給你什麼? – Oded 2011-04-29 06:49:45

回答

3

使用模運算符。

do something;  
++counter; counter %= 7; ++counter; 

要使用真正位運算的模必須冪-2並非如此這裏。

PS:如果你的計數器開始於0而不是1,您就不需要第二++counter和會寫是這樣的:

for (int counter = 0; (somecondition); ++counter, counter %= 7) 
{ 
    do something; 
} 

PPS:需要注意的是一般的if執行比模快,壽。

+0

它應該工作。這就是爲什麼我需要1個班輪:'byte output =(byte)((inputByte&0xF8)| counter ++);'因此它變成'byte output =(byte)((inputByte&0xF8)|(++ counter%7 ));'。模快嗎? – Schultz9999 2011-04-29 06:53:55

+1

在這種情況下,你想要的是'byte output =(byte)((inputByte&0xF8)|(++ counter%6 + 1));',假設inputByte和計數器最初從1開始。而no,modulo是slow ,與「if」相比。與整數除法相同的成本。 – 2011-04-29 07:04:12

相關問題