使用带有指定为#define的数字的shift运算符

时间:2012-09-06 07:51:13

标签: c bit-shift

有人知道这个定义的含义吗

#define RECV_BUFFER_LENGTH 4096

int main()
{


unsigned char buffer[RECV_BUFFER_LENGTH >> 1];
...
}

缓冲区字符串的长度是多少?

2 个答案:

答案 0 :(得分:7)

您可以按照以下方式翻译:

unsigned char buffer[RECV_BUFFER_LENGTH >> 1];
unsigned char buffer[4096 >> 1]; // replace RECV_BUFFER_LENGTH by its definition

>>是按位的右移运算符。 4096 >> 1表示将数字4096右移一位(在二进制表示中)。 4096的二进制表示修改如下:

1000000000000 <-- this is 4096
 100000000000 <-- after shifting right by 1 bit, this is 2048

这给出了:

unsigned char buffer[2048]; // buffer string is a 2048 element char array.

答案 1 :(得分:3)

有人认为他们会通过不使用更多可读性来获利。

unsigned char buffer[RECV_BUFFER_LENGTH / 2]

实际上这是在编译时评估的。如果不是这样,优化器可以将其转换为更快的可读性转换。