我有这样的代码:
tmp = (uint)len;
writer.CurPosition = value + 1;
do
{
value++;
writer.dest.WriteByte((byte)((tmp & 0x7F) | 0x80));
} while ((tmp >>= 7) != 0);
但我不明白
tmp >>= 7
是如何工作的?我有这样的代码:
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 >>= 7
表示将 tmp
向右移动 7 位,并将其设置为该值。
循环将继续执行,直到 tmp
为零。
+=
,只不过不是使用加法,而是使用位移操作。 - Nick Zuber