C#:移位左赋值运算符行为

时间:2010-03-24 05:28:36

标签: c# bitwise-operators

我正在运行有时产生此代码的代码:

UInt32 current;  
int left, right;  

...

//sometimes left == right and no shift occurs
current <<= (32 + left - right);

//this works
current <<= (32 - right);
current <<= left;

对于任何值&gt; = 32,只显示值%32。框架中是否出现了一些“优化”?

1 个答案:

答案 0 :(得分:6)

C#3.0语言规范,7.8“移位运算符”:

  

对于预定义的运算符,要移位的位数计算如下:

     
      
  • 当x的类型为int或uint时,移位计数由计数的低5位给出。换句话说,移位计数是根据计数和计算来计算的。为0x1F。
  •   
  • 当x的类型为long或ulong时,移位计数由计数的低6位给出。换句话说,移位计数是根据计数和计算来计算的。 0x3F的。
  •