2013-06-21 187 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