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

rol*_*oll 2 c bit-shift

有人可能知道这个定义的含义

#define RECV_BUFFER_LENGTH 4096

int main()
{


unsigned char buffer[RECV_BUFFER_LENGTH >> 1];
...
}
Run Code Online (Sandbox Code Playgroud)

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

ron*_*chn 7

您可以按如下方式翻译:

unsigned char buffer[RECV_BUFFER_LENGTH >> 1];
unsigned char buffer[4096 >> 1]; // replace RECV_BUFFER_LENGTH by its definition
Run Code Online (Sandbox Code Playgroud)

>>是顺位右移运算符.4096 >> 1意味着将数字右移一位4096(在二进制表示中).二进制表示4096修改如下:

1000000000000 <-- this is 4096
 100000000000 <-- after shifting right by 1 bit, this is 2048
Run Code Online (Sandbox Code Playgroud)

这给了:

unsigned char buffer[2048]; // buffer string is a 2048 element char array.
Run Code Online (Sandbox Code Playgroud)