2014-02-17 108 views
3

有人能解釋我這個函數的工作原理嗎?按位運算符文件函數php

$size=100 //kb 
    if (filesize(file) > ($size << 10)) 
    echo "file too big"; 

$size << 10如何工作?我怎樣才能讓它使用MB而不是KB?

回答

5

表達式$size << 10將位模式向左移動10次,實際上乘以1024;換句話說,它是$size * 1024

每次執行左移時,都會將該值乘以係數2。另見bitwise operators

如果你想$size意味着在MB的大小,您可以通過另一個1024繁殖,即

if ($filesize($file) > $size * 1024 * 1024) { 
    echo "file too big"; 
} 

或者:

if ($filesize($file) > $size << 20) { 
    echo "file too big"; 
} 
+1

左移並劃分,什麼? – TimWolla

+0

左移倍增。 filesize返回字節數... – sachleen

+1

@Jack我建議您仔細閱讀文檔。 「將$ a $ b步驟的位移到左邊(每步意味着」乘以2「)」 – sachleen

1

$size << 10表示$size * pow(2, 10)2的第十個次冪是1024,這是千字節中的字節數。兆字節中的字節數是pow(2, 20);你可以把它寫成$size << 20

0

文件大小函數返回字節中文件的大小。 $size值定義爲KB($size << 10)從KB轉換爲字節,以便比較正確。

0

這是一個左移運算。

100 << 10裝置轉換100至10。向左這使你102400

這是相同的,通過1024

乘以它轉換到100KB字節,這是什麼filesize()回報。

2

數字在內部表示爲二進制,一系列的零和一。該<<運營商將轉移全部由指定的地方量留下的二進制數字,在右邊把它追加零,例如:

7 << 2 
= 111 << 2 (7 = 111 in base two) 
= 11100 
= 28 (11100 = 28 in base ten) 

你需要知道1024 = 210,因此有下一個10數字二進制表示,因此向左移動10位數字導致該數字乘以1024