运营商<<<<<做这行吗?

时间:2011-04-03 09:55:03

标签: c++ operators

我无法理解这一行的作用:

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);

其中:

unsigned char fBuffer[32];
int fBitIndex;

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

fBitIndex = 8;

<<有什么用?

4 个答案:

答案 0 :(得分:4)

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

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);

相当于

fBuffer[fByteIndex] += 128;

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

答案 1 :(得分:2)

这叫做位移。每个字节由8位(0或1)组成。通过向左或向右移位一次,您可以将数字乘以2或除以2。

答案 2 :(得分:2)

这有点转变。十进制数1以二进制表示(仅显示低8位)为

00000001

如果我有

int i=1;
int j=i<<1;
然后我将把这个数字转移到左边一个地方。然后我会有二进制文件

00000010

以十进制表示的是值2.如果我有

int j=i<<6;

然后我会

01000000

以十进制表示的是128。

答案 3 :(得分:1)

设置位fBuffer [fByteIndex]

1&lt;&lt; N只是位寻址。

&LT;&LT;是移位运算符并且1&lt; 0是0b1,1 <&lt;&lt; 1&lt; 0是0b10 1&lt;&lt;&lt;&lt; 6&gt;是0b1000000

因此,基于fByteIndex和fBitIndex,propper位设置为1。

在这种情况下,在寻址位为alredy 1的情况下使用+,发生溢出,但我认为在你的代码中这不是大小写,并且在赋值之前addresd位是0。