【发布时间】:2010-03-24 05:28:35
【问题描述】:
我运行的代码有时会产生这样的结果:
UInt32 current;
int left, right;
...
//sometimes left == right and no shift occurs
current <<= (32 + left - right);
//this works
current <<= (32 - right);
current <<= left;
对于任何值 >= 32 都会出现,只有值 % 32 被移动。框架中是否发生了一些“优化”?
【问题讨论】:
-
问题不清楚。
UInt32有 32 个值位。如果将其左移 32 位,则所有位都将为零(因为您已将所有值位“移开”)。如果你移动更多,你仍然会得到所有位为零,所以效果是完全一样的。你期待什么? -
这不是优化;这就是操作符被定义为如何工作的方式。
标签: c# bitwise-operators