2014-02-17 1 views
3

이 함수의 작동 방식을 설명 할 수 있습니까?비트 연산자 파일 함수 PHP

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

$size << 10은 어떻게 작동합니까? KB 대신 MB를 사용하려면 어떻게합니까?

답변

5

표현식 $size << 10은 비트 패턴을 왼쪽으로 10 번 이동시켜 1024를 효과적으로 곱합니다. 즉, $size * 1024입니다.

왼쪽 시프트를 수행 할 때마다 값에 2를 곱합니다. bitwise operators도 참조하십시오. 당신이 MB의 크기를 의미하는 $size를 원한다면, 다른 1,024을 곱

, 즉

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의 10 분의 1은 킬로 바이트의 바이트 수인 1024입니다. 메가 바이트 단위의 바이트 수는 pow(2, 20)입니다. $size << 20으로 작성할 수 있습니다.

0

파일 크기 함수는 파일 크기를 바이트으로 반환합니다. $size 값은 KB으로 정의됩니다. ($size << 10)은 비교가 올바른지 확인하기 위해 KB에서 바이트로 변환합니다.

0

그것은 왼쪽 시프트 연산자입니다.

100 << 10는 그것은 무엇 filesize() 반환되는, 그것은 바이트 1백킬로바이트 변환있어 1024

곱과 동일합니다 당신 102400

에게주는 그 (10)에 의해 왼쪽으로 100 이동을 의미합니다.

2

숫자는 내부적으로 2 진수, 0과 1로 표시됩니다. << 운영자는 예를 들어, 그것은 제로를 추가 오른쪽에, 장소의 지정된 양만큼 왼쪽으로 모든 이진 숫자를 이동합니다 :

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

당신이 1024 = 210 따라서는이 알 필요가 다음 10 자릿수 이진 표현이므로 왼쪽으로 10 자리 이동하면 숫자에 1024을 곱합니다.