模-n计数器

2019-04-13 14:39发布

通常的做法是将计数器加1,再将结果除以n(n为最大值),余数为结果。这种计数器用途很广,如循环队列。   counter = (counter + 1)%n;   相比来讲,使用比较的方法来实现的话效率会更高:   counter = counter + 1; if( counter >= n ) {     counter = 0; }   而大多数情况下,与运算的方法显得更加高效,缺点就是最大值不能随意取:   即计数器加1,再与数n=2m - 1(0至m-1位都是1,其他位都是0) n = 0x3f = 25 - 1 = 31,即 n = 00011111,n为最大值,且是2的倍数减1的数:   counter = (counter + 1) & 0x3f;