2014-02-17 72 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