PHPでは、 bindec()関数を使用して、バイナリ文字列を対応する小数数に変換します。その定義は非常に単純です:
int|float bindec(string $binary_string)
しかし、多くの開発者はそれを使用する際に疑問を抱きます: bindec()関数は整数型( int )またはフローティングポイントタイプ( float )を返しますか?この質問に対する答えは完全に直感的ではなく、以下は詳細な分析です。
<?php
$binary = "1010"; // バイナリ番号,小数に等しい10
$decimal = bindec($binary);
echo $decimal; // 出力:10
echo gettype($decimal); // 出力:integer
?>
この例から、 bindec()は整数型を返します。
PHPの整数タイプ( INT )には、32ビットシステムと64ビットシステムで異なる範囲があります。
32ビットシステムの最大整数は2,147,483,647 (約21億)です
64ビットシステムの最大整数は9,223,372,036,854,775,807 (約9,000億)です。
バイナリ文字列の変換された値がシステム整数範囲を超えると、PHPは自動的に戻り値をフロートに変換します。これは、PHPの整数タイプにサイズの制限があるため、フローティングポイント数のタイプはより広い範囲の数値を表すことができるためです(ただし、精度が失われる可能性があります)。
例は次のとおりです。
<?php
// 32ビットシステムはより大きくなっています2147483647的バイナリ番号
$binary = "11111111111111111111111111111111"; // 32個々1,等しい4294967295,超える32ビット整数範囲
$decimal = bindec($binary);
echo $decimal . "\n"; // 出力:4294967295
echo gettype($decimal) . "\n"; // 32位系统出力:double (PHP真ん中floatasとして表示されるタイプdouble)
?>
32ビットシステムでは、この値は最大整数範囲を超えるため、戻り点は浮動小数点数です。
バイナリ番号に対応する小数点が整数範囲内にある場合、 bindec()がintタイプを返します。
値が整数範囲を超えると、 bindec()はフロートタイプを返します。
64ビットシステムでは、非常に大きなバイナリ数のみがフロートを返し、32ビットシステムの変換範囲は小さくなります。
bindec()は、バイナリ文字列を単純に署名していない数値に変換するだけで、バイナリ文字列には正と負の兆候の概念はありません。署名されたバイナリ番号を処理する必要がある場合は、変換ロジックを自分で処理する必要があります。
bindec()の詳細な手順については、 PHPマニュアルをご覧ください。