2 개의 동일한 함수 (PHP와 자바 스크립트 중 하나)가 다른 결과를 반환하는 경우 이상한 결과가 나타납니다.비트 시프 팅시 PHP와 JS에서 다른 결과 얻기
코드 줄의 양의 입력은 동일하다 :
a = 4653896912;
b = 13;
I는 두 변수 타입을 체크 한 두 변수 PHP JS에서의 숫자 및 정수이다.
a = a >> b;
당신은 은 모두 이후에 같은 값을 가지고 있지만,하는 내가 '기대 :
$a = $a >> $b;
은 자바 스크립트가이있다 :
PHP에 대한 코드의 라인이있다 다음을 얻는 것 :
PHP: $a = 568102
JS: a = 43814
나는 나를 완전히 당황하게했다. 이 지점에서.
이것은 분명히 32 비트를 사용하는 64 비트 정수와 JS를 사용하는 PHP의 문제입니다. 지금 당면한 문제는이 계산을 위해 32 비트 정수를 사용하도록 PHP를 가져와야한다는 것입니다. 다른 사람이 쓴 것처럼 보이는 함수를 찾았지만, 출력이 전혀 변하지 않는 것 같습니다.
private static function toInt32(&$x) {
$z = hexdec(80000000);
$y = (int) $x;
if($y ==- $z && $x <- $z){
$y = (int) ((-1) * $x);
$y = (-1) * $y;
}
$x = $y;
}
PHP는 비트 오른쪽 시프트로 '>>'의 올바른 결과와 비슷합니다. –
안녕하세요 브라이언, 정수의 크기는 플랫폼에 따라 다릅니다. PHP 매뉴얼을 보아라. http://de3.php.net/integer ... 시스템에 대한 더 많은 정보를 제공 할 수 있습니까? 32 비트? 64 비트? 브라우저 유형 및 PHP 버전? 고마워요! – BaggersIO
안녕 얘들 아 모든 입력 주셔서 감사합니다, 그건 분명히 내 서버의 문제가 64 비트되고. 문제는 이제 PHP가 32 비트 정수로 제한하면서 PHP가 이러한 계산을 실행하도록하여 결과가 JS의 결과와 일치하도록해야한다는 것입니다. – Brian