2013-04-21 80 views
-2

正如標題所示,我對<<=代表什麼感到困惑。我知道<<是一個換擋操作員,但這是我第一次看到=。任何澄清?<< =代表什麼(在C中)?

樣品的編號:

#include <stdio.h> 
main() { 
    unsigned int i, s; 
    for(s = i = 0; i <= 7; i++){ 
    switch (i%3) { 
     case 0: i++; 
     case 1: i <<= (7 & (i + 1)) | ((i + 2) & 6); s += i; break; 
     case 2: i += (i^i) | 1 ; continue; 
    } 
    s++; 
    } 
    printf("%d\n", s); 
} 
+8

很簡單:'a << = 7'等於'a = a << 7'。 – 2013-04-21 10:36:32

+0

與'+ ='類似。但用'<<'替換'+'。 – 2013-04-21 10:37:20

+0

謝謝!發佈它作爲答案? :) – murtaugh 2013-04-21 10:37:42

回答

8

AFAIK >>=是 「相同」 的操作。 ,您可以調用

i = i << 4; 

i <<= 4; 

它具有同樣的效果。

這就像i = i + 5;i += 5;

0

< < = 移後的第一操作數由所述第二操作數的值指定的比特數的左值;將結果存儲在由第一個操作數指定的對象中。

3

該運算符稱爲按位左移賦值運算符。

C語言和C語言(C++,Java,Objective C,C#等)有一些名爲複合賦值的運算符。他們有這樣的一般形式:

a OP= b; 

其中OP就像許多允許運營商之一

  • +除了給+=
  • -減法給-=
  • *乘法給*=
  • /師給/=
  • |按位或給予|=
  • &按位並給予&=

只是僅舉幾例。

那麼複合賦值操作符做什麼?

他們是一個速記。取而代之的

a = a OP b; 

使用

a OP= b; 

有一個第二個好處a僅評估一次。

這是一個先進的概念。欲瞭解更多詳情,請參閱StackOverflow answerLeft side evaluated only once