Побитовые операторы файловая функция php


Может ли кто-нибудь объяснить мне, как работает эта функция?

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

Как работает $size << 10? Как я могу заставить его использовать МБ вместо КБ?

Author: TimWolla, 2014-02-17

5 answers

Выражение $size << 10 сдвигает битовый шаблон влево в 10 раз, эффективно умножая его на 1024; Другими словами, это $size * 1024.

Каждый раз, когда вы выполняете сдвиг влево, вы умножаете значение в два раза. См. также побитовые операторы.

Если вы хотите, чтобы $size означал размер в МБ, вы умножаете еще на 1024, т.Е.

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

Или:

if ($filesize($file) > $size << 20) {
    echo "file too big";
}
 5
Author: Ja͢ck, 2014-02-17 01:30:45

Числа внутренне представлены в двоичном виде, в виде ряда нулей и единиц. Оператор << сдвинет все двоичные цифры влево на указанное количество мест, справа он добавляет нули, например:

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

Далее вам нужно знать, что 1024 = 210 и, следовательно, имеет двоичное представление 10 цифр, поэтому сдвиг влево на 10 цифр приводит к тому, что число умножается на 1024.

 2
Author: TimWolla, 2014-02-17 01:26:19

$size << 10 означает $size * pow(2, 10). Десятая степень 2 равна 1024, что равно числу байтов в килобайте. Количество байтов в мегабайте равно pow(2, 20); вы могли бы записать его как $size << 20.

 1
Author: Amadan, 2014-02-17 01:25:26

Функция filesize возвращает размер файла в байтах . Значение $size определяется как КБ. ($size << 10) преобразует из КБ в байты, чтобы сравнение было правильным.

 0
Author: Shaunak Kashyap, 2014-02-17 01:25:33

Это оператор сдвига влево.

100 << 10 означает сдвиг 100 влево на 10. Это дает вам 102400

Это то же самое, что умножить на 1024.

Он преобразует 100 кб в байты, что и возвращает filesize().

 0
Author: sachleen, 2014-02-17 01:25:56