【问题标题】:What X >>= N does?X >>= N 做什么?
【发布时间】:2016-04-10 12:16:21
【问题描述】:

我有这个代码:

tmp = (uint)len;
writer.CurPosition = value + 1;
do
{
    value++;
    writer.dest.WriteByte((byte)((tmp & 0x7F) | 0x80));
} while ((tmp >>= 7) != 0);

但我不明白tmp >>= 7 是如何工作的?

【问题讨论】:

标签: c# bitwise-operators


【解决方案1】:

>> 是位移运算符

tmp >>= 7tmp 向右移动 7 位并将其设置为该值。

循环将一直持续到tmp 为零

【讨论】:

  • 是的,我知道什么是位移,但这是我第一次看到它被重新分配。谢谢!
  • @Vlad 将其视为 +=,而不是加法,而是位移
【解决方案2】:

>> 被称为 right bitwise-shift 运算符。并且由于在>> 之后还有额外的=(形成复合赋值 运算符>>=),因此 assignedassigner 变量 (tmp) 将被共享

或者换句话说,使用给定的例子,

tmp >>= 7; //actually you use tmp both to assign and to be assigned

等价于

tmp = tmp >> 7; //actually you use tmp both to assign and to be assigned

现在关于bitwise-shift操作,我认为最好用一个例子来说明。

假设tmp 的值为0xFF00(二进制表示为1111 1111 0000 0000),那么如果我们在按位级别看,>>= 的操作如下所示

1111 1111 0000 0000 //old tmp
------------------- >> 7
0000 0001 1111 1110 //Shifted by 7 -> this is going to be the new value for tmp

因此,tmp 的新值将是 0x01FE(即 0000 0001 1111 1110

【讨论】:

    【解决方案3】:

    这实际上是 C 和 C++ 的一部分,称为Compound assignment operator

    tmp >>= 7
    

    等价于

    tmp = tmp >> 7
    

    使用>> 作为按位右移

    【讨论】:

      猜你喜欢
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2015-09-02
      • 2016-05-21
      • 2011-05-05
      • 2019-02-19
      相关资源
      最近更新 更多