php에서, bindec () 함수는 이진 문자열을 10 진수로 변환하는 데 사용됩니다. 구문은 매우 간단합니다.
int bindec ( string $binary_string )
여기서 $ binary_string은 이진 번호를 나타내는 0 과 1 만 포함하는 문자열입니다.
입력 바이너리 스트링이 양수를 나타내는 경우, bindec () 은 해당 소수점 숫자로 직접 변환합니다. 예를 들어:
<?php
echo bindec("1010"); // 산출 10
echo "\n";
echo bindec("1111"); // 산출 15
?>
여기서는 이진 문자열 "1010" 및 "1111" 이 각각 10 진수 10 및 15 로 변환됩니다. 이것은 Bindec () 의 가장 일반적인 사용법이며 결과는 정확히 예상대로입니다.
서명 된 정수의 표현과 달리, bindec () 함수는 이진 문자열이 음수인지를 자동으로 식별하지 않습니다. 항상 입력을 서명되지 않은 이진수로 소수점으로 변환합니다. 따라서 음수 숫자를 직접 나타내는 보완 (이진 형태) 문자열로 전달하면 결과는 큰 양의 정수가됩니다.
예를 들어:
<?php
echo bindec("11111111"); // 산출 255,대신에 -1
echo "\n";
echo bindec("10000000"); // 산출 128,대신에 -128
?>
여기서 "11111111" 은 8 비트 서명 정수에서 -1을 나타내지 만 Bindec () 는 서명되지 않은 255 로 직접 간주합니다. 마찬가지로, "100000000" 은 8 비트 보완에서 -128 이지만 함수는 128을 반환합니다.
이진 문자열에 따라 음수를 처리 해야하는 경우 보완 코드의 판단 및 변환을 직접 구현해야합니다. 간단한 방법은 다음과 같습니다.
가장 높은 비트를 결정하십시오 (가장 높은 비트는 1 인 경우 부정적인 것으로 간주됩니다).
숫자가 음수 인 경우 보완 코드로 변환됩니다.
샘플 코드는 다음과 같습니다.
<?php
function bindec_signed($bin) {
$num = bindec($bin);
$bits = strlen($bin);
// 가장 높은 비트가 있는지 확인하십시오1(음수 플래그)
if ($bin[0] === '1') {
// 보완 코드의 음수 값을 계산하십시오
$num -= (1 << $bits);
}
return $num;
}
// 시험
echo bindec_signed("11111111"); // 산출 -1
echo "\n";
echo bindec_signed("10000000"); // 산출 -128
echo "\n";
echo bindec_signed("01111111"); // 산출 127
?>
이 함수는 보완 코드의 수학적 원리를 사용하여 이진 번호의 최고 비트를 판단하고 올바른 양의 및 부정적인 변환을 만듭니다.
Bindec () 함수는 기본적으로 서명되지 않은 숫자로 이진 문자열을 사용하며 출력 결과는 항상 양수 정수 또는 0입니다.
음수를 나타내는 2의 보완의 경우, bindec ()는 올바른 음수 값을 직접 제공 할 수 없으며 자체적으로 추가로 처리해야합니다.
가장 높은 비트를 판단하고 보체 계산을 결합하여 음수의 올바른 변환을 달성 할 수 있습니다.