我无法理解这一行的作用:
fBuffer[fByteIndex] += 1 << (fBitIndex - 1);
其中:
unsigned char fBuffer[32];
int fBitIndex;
和
for ( int i = 0; i < 32; i++ )
fBuffer[i] = 0;
fBitIndex = 8;
<<
有什么用?
答案 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。