ulong数据类型的问题

时间:2013-06-21 10:42:40

标签: c#-4.0

enter image description here

我有上面的方法。所以我的问题是当我通过 10.0 10.5 作为参数时,它如何返回 mask = 1048576

1 个答案:

答案 0 :(得分:2)

从我所看到的情况来看,你使用i == 20进行一次循环。

(ulong)1 << 20 == 1048576

要将其分解 - 10.0 * 2 == 20.010.5 * 2 == 21.0

你的for循环基本上是for(var i = 20; i < 21; i++)

然后or归零mask值,结果为i << 20,即1048576并退出循环。

按预期工作。


右移位运算符<<有两个参数 - 要移位的值和多少。

要理解它,你需要用二进制思考,用二进制表示事物。

例如,使用4位,您会看到1表示为:

0001

如果你把它移到两个地方:

1 << 2

你得到:

0100

小数为4。这同样适用于<< 20,它将所有位20位置向左移动(丢弃溢出位)。

100000000000000000000 (binary) == 1048576 (decimal)