Dans PHP, la fonction Bindec () est utilisée pour convertir les chaînes binaires en nombres décimaux. Sa syntaxe est très simple:
int bindec ( string $binary_string )
Où $ binary_string est une chaîne ne contenant que 0 et 1 , représentant un numéro binaire.
Lorsque la chaîne binaire d'entrée représente un nombre positif, Bindec () le convertira directement en nombre décimal correspondant. Par exemple:
<?php
echo bindec("1010"); // Sortir 10
echo "\n";
echo bindec("1111"); // Sortir 15
?>
Ici, les cordes binaires "1010" et "1111" sont converties respectivement en décimales 10 et 15 . Il s'agit de l'utilisation la plus courante de Bindec () , et les résultats sont exactement comme prévu.
Contrairement à la représentation des entiers signés, la fonction Bindec () n'identifie pas automatiquement si une chaîne binaire représente un nombre négatif. Il convertit toujours l'entrée en décimal comme un numéro binaire non signé. Par conséquent, si vous transmettez une chaîne complémentaire (forme binaire) représentant directement un nombre négatif, le résultat sera un grand entier positif.
Par exemple:
<?php
echo bindec("11111111"); // Sortir 255,Plutôt -1
echo "\n";
echo bindec("10000000"); // Sortir 128,Plutôt -128
?>
Ici, "11111111" représente -1 dans un entier signé 8 bits, mais Bindec () le voit directement comme un 255 non signé. De même, "10000000" est de -128 en complément 8 bits, mais la fonction renvoie 128 .
Si vous devez traiter des nombres négatifs en fonction des chaînes binaires, vous devez implémenter le jugement et la conversion du code du complément par vous-même. Un moyen simple est:
Déterminez le bit le plus élevé (le bit le plus élevé est considéré comme négatif s'il est 1)
Si le nombre est négatif, il sera converti en code de complément.
L'exemple de code est le suivant:
<?php
function bindec_signed($bin) {
$num = bindec($bin);
$bits = strlen($bin);
// Déterminer si le bit le plus élevé est1(Indicateur de nombre négatif)
if ($bin[0] === '1') {
// Calculez la valeur négative du code du complément
$num -= (1 << $bits);
}
return $num;
}
// test
echo bindec_signed("11111111"); // Sortir -1
echo "\n";
echo bindec_signed("10000000"); // Sortir -128
echo "\n";
echo bindec_signed("01111111"); // Sortir 127
?>
Cette fonction utilise le principe mathématique du code du complément pour juger le plus haut nombre de binaires et effectuer des conversions positives et négatives correctes.
La fonction Bindec () utilise les chaînes binaires comme nombres non signés par défaut, et le résultat de sortie est toujours des entiers ou des zéros positifs.
Pour le complément de Two qui représente des nombres négatifs, Bindec () ne peut pas donner directement les valeurs négatives correctes et doit être traitée en plus.
La conversion correcte des nombres négatives peut être obtenue en jugeant le bit le plus élevé et en combinant le calcul du complément.