2013-06-21 105 views
0

enter image description here问题ULONG数据类型

我有以上类型method.So的,我的问题是,当我经过10.010.5作为参数,它是如何返回面膜= 1048576的?

回答

2

从我所看到的,你通过循环一次,与i == 20


打破它 - 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) 
+0

是的你是对的,但我想知道它是怎么发生的? – Sampath

+0

@Sampath - 你从来没有读过你的头脑中的代码?我不明白你认为它不应该在哪里? – Oded

+0

其实我需要一个解释,当我20岁时,它是如何变成1048576的? – Sampath