0

enter image description here

I am having above kind of method.So my question is When I passed 10.0 and 10.5 as parameters, How it returns mask = 1048576 ?

4

1 回答 1

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)
于 2013-06-21T10:48:11.343 回答