位运算和模运算的比较
前言
在我利用数组来实现一个循环队列的时候,为了提高效率,我使用了模运算。类似如下:
#define BUFFER_SIZE 100
void processing()
{
int buffer[BUFFER_SIZE];
int i = 0;
while (1)
{
// 遍历队列的每一个元素,并进行处理
// 访问下一个元素
i = (i + 1) % BUFFER_SIZE;
}
}
这种写法要比一般的循环到数组结尾再判断实现简单,且要快很多。但后来了解到了另一种写法,要比这种写法更快,但是对数组空间的开辟要求的比较严。示例如下:
#define BUFFER_SIZE 128
void processing()
{
int buffer[BUFFER_SIZE];
int i = 0;
while (1)
{
// 遍历队列的每一个元素,并进行处理
// 访问下一个元素
i = (i + 1) & 127;
}
}
这种就是常说的位运算,但是要求数组空间开辟的大小必须为2的幂次方。这样的话数组下标最大为2的幂次方-1 。按位与即可得到正确的下标。
评论
0 评论