什么<< =代表(在C中)?

时间:2013-04-21 10:34:42

标签: c syntax

正如标题所说,我对<<=所代表的内容感到有些困惑。我知道<<是一个移位运算符,但这是我第一次看到=。有任何澄清吗?

示例代码:

#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); 
} 

3 个答案:

答案 0 :(得分:8)

AFAIK >>=是“相同”操作。 你可以打电话

i = i << 4;

i <<= 4;

它具有相同的效果。

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

答案 1 :(得分:3)

此运算符称为按位左移分配运算符。

C语言和C系列中的语言(C ++,Java,Objective C,C#和其他语言)都有一些叫做复合赋值运算符的东西。他们有这种一般形式:

a OP= b;

其中OP是许多允许的运算符之一,例如

  • +另外提供+=
  • -减法给予-=
  • *乘法给出*=
  • /师给予/=
  • |按位或给|=
  • &按位并给予&=

仅举几例。

复合赋值运算符做了什么?

他们是速记。而不是

a = a OP b;

使用

a OP= b;

第二个好处a仅评估一次。

这是一个先进的概念。有关详细信息,请参阅此StackOverflow answer Left side evaluated only once

答案 2 :(得分:0)

&LT;&LT = 移位第一个操作数的值,留下第二个操作数的值指定的位数;将结果存储在第一个操作数指定的对象中。