In PHP wird die BindEc () -Funktion verwendet, um binäre Zeichenfolgen in Dezimalzahlen umzuwandeln. Die Syntax ist sehr einfach:
int bindec ( string $binary_string )
Wobei $ Binary_String eine Zeichenfolge ist, die nur 0 und 1 enthält, die eine Binärzahl darstellt.
Wenn die Eingangs -Binärzapfen eine positive Zahl darstellen, wandelt Binec () direkt in die entsprechende Dezimalzahl um. Zum Beispiel:
<?php
echo bindec("1010"); // Ausgabe 10
echo "\n";
echo bindec("1111"); // Ausgabe 15
?>
Hier werden die binären Saiten "1010" und "1111" in die Dezimalzahl 10 bzw. 15 umgewandelt. Dies ist die häufigste Verwendung von BindEc () und die Ergebnisse sind genau wie erwartet.
Im Gegensatz zur Darstellung von signierten Ganzzahlen identifiziert die Funktion Binesec () nicht automatisch, ob eine binäre Zeichenfolge eine negative Zahl darstellt. Es wandelt die Eingabe immer als nicht signierte Binärzahl in Dezimalzahl um. Wenn Sie also eine Komplement (Binärform) übergeben, die eine negative Zahl direkt darstellt, ist das Ergebnis eine große positive Ganzzahl.
Zum Beispiel:
<?php
echo bindec("11111111"); // Ausgabe 255,Stattdessen -1
echo "\n";
echo bindec("10000000"); // Ausgabe 128,Stattdessen -128
?>
Hier repräsentiert "11111111" -1 in einer 8 -Bit -signierten Ganzzahl, aber Binec () sieht es direkt als vorzeichenlos 255 . In ähnlicher Weise ist "10000000" -128 in 8 -Bit -Komplement, aber die Funktion gibt 128 zurück.
Wenn Sie negative Zahlen basierend auf binären Zeichenfolgen verarbeiten müssen, müssen Sie das Urteil und die Umwandlung von Komplementcode selbst implementieren. Ein einfacher Weg ist:
Bestimmen Sie das höchste Bit (das höchste Bit wird als negativ angesehen, wenn es 1 ist)
Wenn die Zahl negativ ist, wird sie in den Komplementcode umgewandelt.
Der Beispielcode lautet wie folgt:
<?php
function bindec_signed($bin) {
$num = bindec($bin);
$bits = strlen($bin);
// Bestimmen Sie, ob das höchste Stück ist1(Negative Zahlenflagge)
if ($bin[0] === '1') {
// Berechnen Sie den negativen Wert des Komplementcode
$num -= (1 << $bits);
}
return $num;
}
// prüfen
echo bindec_signed("11111111"); // Ausgabe -1
echo "\n";
echo bindec_signed("10000000"); // Ausgabe -128
echo "\n";
echo bindec_signed("01111111"); // Ausgabe 127
?>
Diese Funktion verwendet das mathematische Prinzip des Komplementcodes, um das höchste Teil einer binären Zahl zu beurteilen und korrekte positive und negative Konvertierungen vorzunehmen.
Die Funktion BindEc () verwendet binäre Zeichenfolgen standardmäßig als nicht signierte Zahlen, und das Ausgabeergebnis ist immer positive Ganzzahlen oder Nullen.
Für die zweier Komplement, die negative Zahlen darstellt, kann Binec () nicht direkt die korrekten negativen Werte ergeben und muss für sich selbst extra verarbeitet werden.
Die korrekte Umwandlung negativer Zahlen kann erreicht werden, indem das höchste Bit beurteilt und die Komplementberechnung kombiniert wird.