Побитовые операторы файловая функция php
Может ли кто-нибудь объяснить мне, как работает эта функция?
$size=100 //kb
if (filesize(file) > ($size << 10))
echo "file too big";
Как работает $size << 10
? Как я могу заставить его использовать МБ вместо КБ?
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";
}
Числа внутренне представлены в двоичном виде, в виде ряда нулей и единиц. Оператор <<
сдвинет все двоичные цифры влево на указанное количество мест, справа он добавляет нули, например:
7 << 2
= 111 << 2 (7 = 111 in base two)
= 11100
= 28 (11100 = 28 in base ten)
Далее вам нужно знать, что 1024 = 2
10
и, следовательно, имеет двоичное представление 10
цифр, поэтому сдвиг влево на 10 цифр приводит к тому, что число умножается на 1024
.
$size << 10
означает $size * pow(2, 10)
. Десятая степень 2
равна 1024
, что равно числу байтов в килобайте. Количество байтов в мегабайте равно pow(2, 20)
; вы могли бы записать его как $size << 20
.
Функция filesize возвращает размер файла в байтах . Значение $size
определяется как КБ. ($size << 10)
преобразует из КБ в байты, чтобы сравнение было правильным.
Это оператор сдвига влево.
100 << 10
означает сдвиг 100 влево на 10. Это дает вам 102400
Это то же самое, что умножить на 1024.
Он преобразует 100 кб в байты, что и возвращает filesize()
.