运算符 << 在这一行中做什么?

Kat*_*ore -1 c++ operators

我无法理解这条线的作用:

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);
Run Code Online (Sandbox Code Playgroud)

在哪里:

unsigned char fBuffer[32];
int fBitIndex;
Run Code Online (Sandbox Code Playgroud)

和:

for ( int i = 0; i < 32; i++ )
     fBuffer[i] = 0;

fBitIndex = 8;
Run Code Online (Sandbox Code Playgroud)

什么<<做呢?

Ale*_*lex 5

<<是左移运算符,假设fBitIndex代码为 8

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);
Run Code Online (Sandbox Code Playgroud)

相当于

fBuffer[fByteIndex] += 128;
Run Code Online (Sandbox Code Playgroud)

为什么?因为左移意味着您将值的位“左移”;在您的情况下,00000001(1)向左移动 7 次,变为10000000(128)。