位运算和模运算的比较
前言 在我利用数组来实现一个循环队列的时候,为了提高效率,我使用了模运算。类似如下: #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 。按位与即可....