현재 위치: > 최신 기사 목록> bindec ()를 사용하여 양과 음수의 차이를 처리합니다.

bindec ()를 사용하여 양과 음수의 차이를 처리합니다.

M66 2025-06-02

php에서, bindec () 함수는 이진 문자열을 10 진수로 변환하는 데 사용됩니다. 구문은 매우 간단합니다.

 int bindec ( string $binary_string )

여기서 $ binary_string은 이진 번호를 나타내는 01 만 포함하는 문자열입니다.


양수 처리

입력 바이너리 스트링이 양수를 나타내는 경우, 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. 가장 높은 비트를 결정하십시오 (가장 높은 비트는 1 인 경우 부정적인 것으로 간주됩니다).

  2. 숫자가 음수 인 경우 보완 코드로 변환됩니다.

샘플 코드는 다음과 같습니다.

 <?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 ()는 올바른 음수 값을 직접 제공 할 수 없으며 자체적으로 추가로 처리해야합니다.

  • 가장 높은 비트를 판단하고 보체 계산을 결합하여 음수의 올바른 변환을 달성 할 수 있습니다.