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 ?
问问题
59 次
1 回答
2
据我所见,您通过循环一次,使用i == 20
.
(ulong)1 << 20 == 1048576
分解它 -10.0 * 2 == 20.0
和10.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 回答