我有这个代码:
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
is 的值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
)