2011-04-29 95 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

相关问题