繁体   English   中英

什么X >> = N呢?

[英]What X >>= N does?

我有这个代码:

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

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

>>被称为右位移运算符。 并且由于在>>之后存在和附加= (形成复合赋值运算符>>= ),因此将共享 分配的分配器变量( 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

现在关于按位移位操作,我认为最好通过一个例子来说明它。

假设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

>>是一个位移操作符

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

循环将继续,直到tmp 为零

这实际上是C和C ++的一部分,称为复合赋值运算符

tmp >>= 7

相当于

tmp = tmp >> 7

使用>>作为按位右移

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM