簡體   English   中英

運算符<<在此行中做什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM