2012-02-15 1 views
12

PHP의 문서는 조금 부족한 내가 마지막 예는 나를 혼란왜 "echo strcmp ('60 ','100 ');" PHP는 출력 5? 이 기능에

echo strcmp('hello', 'hello'); 
//outputs 0 as expected - strings are equal. 
echo '<hr />'; 

echo strcmp('Hello', 'hello'); 
//outputs -32, a negative number is expected as 
//uppercase H has a lower ASCII value than lowercase h. 
echo '<hr />'; 

echo strcmp('60', '100'); 
//outputs 5. 

...이 기능은 ASCII 값을 비교 것을 읽을 수 있도록했다. 나는 그것이 왜 긍정적 인 숫자를 출력하는지 이해하지 못한다. '60'의 6 = 54

  • 전체 ASCII 값 0 = 48

  • ASCII 값 = 49
  • 1의 ASCII 값

    • ASCII 값 = (54 + 48) = '100'= (49 + 48 + 48) = 145

    STRCMP 102

  • 전체 ASCII 값() 기능의 인 '60'는 ASCII 값 과 '100'의 문자열 길이가

    사람이 이유를 설명 할 수 '60'

    보다 큰 것으로 보인다에도 불구하고 '100'보다 "더 큰"이라고 aying?

    감사

  • 답변

    13

    strcmp()은 문자열 사이에 제 일치하지 않는 문자의 차이를 리턴한다.

    6 - 당신이 그것을 볼 때 1 5.

    , 당신은 아마 문자 또는 숫자 — 단지 숫자

    +6

    이것은 보장 된 동작이 아니라는 점을 유의하십시오.이 입력 매개 변수의 값이 0보다 커야한다는 것이 보장됩니다. –

    +2

    @ SimonRichter : 동의하지 않는다고 동의합니다. 그러나 그것은 전통적입니다. 1978 년에 내가 작성한이 코드는 반환 값을 계산하는 방법에 따라 달라집니다. * 여전히 작동합니다 *! – wallyk

    +0

    @wallyk, 문서가 첫 번째 문자의 차이점을 반환한다고 말할 때이 대답이 올바른지 어떻게 알 수 있습니까? – Pacerier

    8

    최초의 차이에서 strcmp() 정지 찾은 때문에보고되지 않습니다. 따라서 '1'의 ASCII 값과 '6'의 ASCII 값인

    +0

    @wallyk, 문서가 첫 번째 문자의 차이점을 반환한다고 말할 때이 동작이 보장된다는 것을 어떻게 알 수 있습니까? – Pacerier

    5

    6의 차이는 1보다 큰 5입니다. 이것은 어휘 비교입니다. 첫 번째 문자가 다르기 때문에 비교가 중단됩니다.