【问题标题】:What does <<= represent (in C)?<<= 代表什么(在 C 中)?
【发布时间】:2013-04-14 08:37:37
【问题描述】:

正如标题所说,我对&lt;&lt;= 所代表的内容有些困惑。我知道&lt;&lt; 是一个移位运算符,但这是我第一次看到= 和它一起出现。有什么解释吗?

示例代码:

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

【问题讨论】:

  • 这很简单:a &lt;&lt;= 7 等于 a = a &lt;&lt; 7
  • 类似于+=。但是将+ 替换为&lt;&lt;
  • 对像我这样的新手提出了一个他不知道答案的问题并在发布之前搜索了网络,因此投了 2 票(并且还在计数)。这个网站又是关于什么的? ://
  • 另见:stackoverflow.com/q/2505550/220060(它不是重复的,因为它是不同的语言,但 C 和 C# 在这方面非常相似)。
  • @SheerFish:这是个好问题。 SO上有很多类似的问题,比如这个:stackoverflow.com/q/2462946/220060.

标签: c syntax


【解决方案1】:

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

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

a OP= b;

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

  • +加法给+=
  • -减法给-=
  • * 乘法给 *=
  • /师给/=
  • | 按位或给出|=
  • &amp; 按位给出&amp;=

仅举几例。

复合赋值运算符有什么作用??

它们是简写。而不是

a = a OP b;

使用

a OP= b;

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

这是一个高级概念。有关更多详细信息,请参阅此StackOverflow answer for Left side evaluated only once

【讨论】:

    【解决方案2】:

    AFAIK &gt;&gt;= 是“相同”的操作。 你可以打电话给

    i = i << 4;
    

    i <<= 4;
    

    效果一样。

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

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        相关资源
        最近更新 更多