2010-12-06 7 views
3

일부 솔루션은 Efficient way of doing 64 bit rotate using 32 bit values이지만 PHP에는 없습니다.32 비트 시스템에서 64 비트 정수의 비트 연산 사용 (php_gpm 확장 없음)

가장 큰 문제는 원격 서버의 큰 정수 9223372036854775808(10)hexadecimal 8000000000000000(16)으로 가져 오는 것입니다.

프로덕션 서버에서 php_gmp (extension)을 사용할 수는 없지만 선택한 비트를받은 값으로 확인해야합니다. 프로덕션 및 개발 서버는 모두 32bits machines입니다.

+0

여기서 문제는 PHP는 단지 가지고 있다는 것입니다 32 32 비트 시스템에 내장 된 32 비트 숫자 유형 ... 하나의 정수, 하나의 부동 소수점. – Powerlord

답변

1

당신이 사용하는 BC 수학 (임의의 정밀 수학)을 수행 할 수 있습니다

BC 수학은 숫자에 수학 연산을 수행 할 수 있습니다. 산술 연산자 사용과 BC 수학 사용의 차이점은 숫자를 정수 또는 부동 소수점으로 저장하는 대신 BC Math가 숫자를 문자열로 반환한다는 것입니다.

http://php.net/manual/en/ref.bc.php

PHP는 BC 수학 컴파일되어야한다; 그러나 대부분의 PHP 설치에는이 기능이 있어야합니다.

문자열에 대해 비트 연산을 수행 할 수 없으며 BC Math에는 비트 함수가 내장되어 있지 않습니다. 하나; 인터넷 검색의 비트를 수행 한 후, 다음 코드 샘플을 발견하고 나는 복사 아래에 여기를 붙여 넣은 :

function bitValue($no) { return bcpow(2, $no); } 
function bitSet($no, $value) { 
    $tmp = bcmod($value, bitValue($no+1)); 
    return bccomp(bcsub($tmp, bitValue($no)), 0)>= 0; 
} 

echo bitSet(49, bitValue(48)) ."\n"; 
echo bitSet(48, bitValue(48)) ."\n"; 
echo bitSet(47, bitValue(48)) ."\n"; 

(hernst42에 학점)

+0

나는 또한 이것을 발견했다 - [http://www.nirvani.net/software/bc_bitwise/bc_bitwise-0.9.0.inc.php.asc] (http://www.nirvani.net/software/bc_bitwise/bc_bitwise) -0.9.0.inc.php.asc)이 도움이 될 것입니다. – bashaus

관련 문제