位运算和模运算的比较

前言

在我利用数组来实现一个循环队列的时候,为了提高效率,我使用了模运算。类似如下:

#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 。按位与即可得到正确的下标。


标题:位运算和模运算的比较
作者:staymeloo7
联系方式:staycoolsun@gmail.com

    评论
    0 评论
avatar

取消