[英]What does operator << do in this line?
我不明白這行的作用:
fBuffer[fByteIndex] += 1 << (fBitIndex - 1);
哪里:
unsigned char fBuffer[32];
int fBitIndex;
和:
for ( int i = 0; i < 32; i++ )
fBuffer[i] = 0;
fBitIndex = 8;
那有什么<<
?
<<
是左移運算符,假設fBitIndex
為8,則代碼
fBuffer[fByteIndex] += 1 << (fBitIndex - 1);
相當於
fBuffer[fByteIndex] += 128;
為什么? 因為左移意味着您將值“左”的位移位; 在您的情況下, 00000001
(1)向左移動7次,變為10000000
(128)。
這稱為移位。 每個字節由8位(0或1)組成。 通過向左或向右移動一位,您可以將數字乘以2或除以2。
有點變化。 十進制數字1用二進制表示(僅顯示低8位),如下所示:
00000001
如果我有
int i=1;
int j=i<<1;
那么我將使用該數字並將其向左移動一位。 然后我將獲得二進制文件
00000010
以十進制表示的是值2。
int j=i<<6;
那我就會
01000000
十進制為128。
它將位設置為fBuffer [fByteIndex]
1 << N只是位尋址。
<<是移位運算符,1 << 0是0b1,1 << 1是0b10 1 << 6是0b1000000
因此,根據fByteIndex和fBitIndex,將propper位設置為1。
在這種情況下,如果尋址位為1時使用+,則會發生溢出,但我認為在您的代碼中情況並非如此,分配前addresd位為0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.