-2

正如标题所说,我对<<=代表的内容有点困惑。我知道<<是一个轮班操作员,但这是我第一次看到=它。任何澄清?

示例代码:

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

3 回答 3

8

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

i = i << 4;

或者

i <<= 4;

它具有相同的效果。

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

于 2013-04-21T10:38:04.040 回答
3

此运算符称为按位左移赋值运算符。

C 和 C 家族中的语言(C++、Java、Objective C、C# 和其他语言)具有称为复合赋值运算符的东西。它们具有以下一般形式:

a OP= b;

OP许多允许的运算符之一在哪里

  • +加法+=
  • -减法-=
  • *乘法给予*=
  • /除法给予/=
  • |按位或给予|=
  • &按位和给予&=

仅举几例。

复合赋值运算符是做什么的?

它们是简写。代替

a = a OP b;

利用

a OP= b;

还有第二个好处a只评估一次。

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

于 2013-04-21T14:05:10.993 回答
0

<<= 将第一个操作数的值左移第二个操作数的值指定的位数;将结果存储在第一个操作数指定的对象中。

于 2013-04-21T10:40:52.190 回答