PHP 언어에서 Moldulo Division (Modulo Division) 작업을 수행 할 때 일부 결과는 초보자를 혼동합니다. 예를 들어, 8% -3을 수행 할 때 결과는 실제로 0입니다. 언뜻보기에는 8을 3으로 나눌 수없고 나머지가 있어야하기 때문에 직관이나 수학적 상식과 상반되는 것 같습니다. 그렇다면 PHP가 왜 0을 반환합니까?
모듈 식 연산자 ( % )는 두 숫자를 나눈 후 나머지를 반환하는 데 사용됩니다. 구문 적으로, 그 표현은 다음과 같습니다.
<span class="fun">a % b = a -b * 바닥 (a / b)</span>
PHP에서 모듈로 작동의 결과 상징은 항상 모듈로 (첫 번째 피연산자)와 일치한다는 점에 유의해야합니다. 이것은 Python 또는 Java와 같은 다른 언어의 동작과 다를 수 있습니다.
예를 들어:
echo 8 % 3; // 산출 2
echo 8 % -3; // 산출 2
echo -8 % 3; // 산출 -2
echo -8 % -3; // 산출 -2
계수가 양수 인 한, 제 2의 피연산자가 양수인지 음수인지, 결과는 양수임을 알 수있다. 계수가 음수이면 결과는 음수입니다.
PHP 사용 서명 된 정수, 즉 정수는 양수 또는 부정적 일 수 있습니다. 그 기본 표현은 일반적으로 2의 보완 형태입니다.
예를 들어:
8 -> 이진 표현:00000000 00000000 00000000 00001000
-3 -> 이진 표현:11111111 11111111 11111111 11111101
8% -3이 실행되면 PHP는 위에서 언급 한 공식을 사용하여 다음을 계산합니다.
8 % -3 = 8 - (-3) * floor(8 / -3)
= 8 - (-3) * (-3)
= 8 - 9
= -1
그러나 놀랍게도 PHP는이 수학적 결과 -1을 반환하지 않지만 2를 반환합니다. PHP 구현이 모듈러스 작동을 조정하여 나머지 숫자 기호가 계수와 일치하기 때문입니다.
이 부분은 진짜 혼란스러운 지점입니다. 일부 PHP 버전 또는 특정 조건에서 8% -3 == 0 의 결과가 발생할 수 있습니다.
실제로 이것은 일반적으로 내부 유형 변환, 플랫폼 별 동작 또는 표현의 맥락으로 인한 경계 상황입니다. 정상적인 상황에서 8% -3을 수행하는 것은 0 대신 2를 반환해야한다는 점을 지적 할 가치가 있습니다.
일부 환경에서 8% -3 == 0이 표시되면 PHP 버전, 플랫폼 아키텍처 및 암시 적 유형 변환 또는 기타 상황 간섭이 있는지 확인하는 것이 좋습니다.
PHP에서 모듈로 운영의 구현 세부 사항을 이해하면 코드를보다 합리적으로 작성하는 데 도움이됩니다. 예를 들어, 양성 및 음성 모듈로를 다룰 때 특정 요구 사항이있는 경우 사용자 정의 기능을 사용하여 결과의 상징적 일관성을 보장 할 수 있습니다.
function mod($a, $b) {
return ($b < 0 ? -1 : 1) * ($a % abs($b));
}
이렇게하면 PHP 버전으로 인한 플랫폼 차이 또는 불일치를 피하면서 결과의 긍정적 및 부정적인 징후를 더 잘 제어 할 수 있습니다.
PHP의 모듈로 작동 규칙, 서명 된 정수 표현 방법 및 모듈로 작동의 기본 구현을 깊이 이해하는 한 PHP에서 0을 반환하는 8% -3 현상은 혼란스러워 보이지만 논리를 이해할 수 있습니다. 실제 개발에서 개발자는 특정 시나리오에 따라 모듈로 작업을 신중하게 사용하고 논리적 오류를 피하기 위해 호환성과 예측 가능성을 고려해야합니다.