【问题标题】:What is the meaning of a >>= b?a >>= b 是什么意思?
【发布时间】:2017-02-02 21:33:03
【问题描述】:

我浏览了互联网并知道它是一个复合赋值运算符。但它是如何工作的呢?

我使用this 链接了解定义,但找不到该语法的确切实现。

【问题讨论】:

  • 将 a 向左移动 b 次。相当于整数除以 2**b。
  • 它的a=a>>b 即移位ab
  • 无法获取,请举例说明
  • @Jean-François Fabre 它将数字 a 向右移动 b 次。我知道的就这么多。我认为你错了。
  • @samarthkejriwal @Jean 是对的。具体有什么不明白的?

标签: c++ operators


【解决方案1】:

在您提供的link 中,有一个使用复合赋值运算符的代码 sn-p:

a+=2; // equivalent to a=a+2

>>= 运算符也以类似的方式工作:

a>>=2; // equivalent to a=a>>2

>> 被称为 (Right) Shift 运算符,它将源操作数的二进制表示向右移动一定数量的位。例如,让我们有这个代码sn-p:

int a=12;
cout<<a<<endl;
a>>=2;
cout<<a<<endl;

当使用 C++ 编译器执行时,代码段的输出将是:

12
3

究竟发生了什么:a 的值为 12,以二进制表示为(仅显示最后 6 位)001100。a&gt;&gt;=2;a 中的位向右移动 2 位并将新值分配给a,因此新的位位置变为000011,即十进制为3,因此a 得到值3,并得到输出。

希望这能澄清困惑。

【讨论】:

  • a=13 , a&gt;&gt;=2a=12,a&gt;&gt;=2 的答案是否相同??
  • 是的,最后两位从数字中移出,因此您得到相同的答案(即 3)。您可以将右移 n 次视为源操作数除以 2^n 的整数除,因此 13/4=12/4=3。
【解决方案2】:

&gt;&gt; 是右移运算符。

正如您提到的,&gt;&gt;= 是一个复合赋值运算符。复合赋值使用运算符修改变量并将新值分配给自身。

a &gt;&gt;= b 等价于a = a &gt;&gt; b 即,a 右移 b 次并分配回 a。

例如,

int a = 8, b = 2;
a >>= b; // right shift by 2 i.e. divide by 2 x b times.
cout << a; // prints value of 2

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2014-02-09
    • 2012-06-14
    • 2018-08-06
    • 1970-01-01
    • 2022-11-10
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多