In PHP wird die Funktion BindEc () verwendet, um einen binären String in die entsprechende Dezimalzahl umzuwandeln. Seine Definition ist sehr einfach:
int|float bindec(string $binary_string)
Aber viele Entwickler haben eine Frage, wenn sie sie verwenden: Gibt die Funktion Binesec () einen Ganzzahltyp ( int ) oder einen schwimmenden Punkttyp ( Float ) zurück? Die Antwort auf diese Frage ist nicht vollständig intuitiv und das Folgende ist eine detaillierte Analyse.
<?php
$binary = "1010"; // Binärzahl,gleich dezimal10
$decimal = bindec($binary);
echo $decimal; // Ausgabe:10
echo gettype($decimal); // Ausgabe:integer
?>
Aus diesem Beispiel gibt Binec () einen Ganzzahltyp zurück.
Der Ganzzahltyp ( INT ) von PHP hat unterschiedliche Bereiche auf 32-Bit-Systemen und 64-Bit-Systemen:
Die maximale Ganzzahl des 32-Bit-Systems beträgt 2.147.483.647 (ca. 2,1 Milliarden)
Die maximale Ganzzahl des 64-Bit-Systems beträgt 9.223.372.036.854.775.807 (etwa 9.000 Milliarden).
Wenn der konvertierte Wert der Binärziel den Systemgeistbereich überschreitet, wandelt PHP den Rückgabewert automatisch in einen Float um. Dies liegt daran, dass der Ganzzahltyp von PHP Größenbeschränkungen aufweist, während schwimmende Punktzahlentypen in der Lage sind, einen größeren Zahlenbereich darzustellen (aber Präzision verlieren).
Beispiele sind wie folgt:
<?php
// 32Das Bit -System ist größer als2147483647的Binärzahl
$binary = "11111111111111111111111111111111"; // 32indival1,gleich4294967295,Überschreiten32Bit Ganzzahl Range
$decimal = bindec($binary);
echo $decimal . "\n"; // Ausgabe:4294967295
echo gettype($decimal) . "\n"; // 32位系统Ausgabe:double (PHPMittefloatTyp als angezeigt alsdouble)
?>
Bei 32-Bit-Systemen überschreitet dieser Wert den maximalen Ganzzahlbereich, sodass die Rückgabe eine schwimmende Punktzahl ist.
Wenn die der Binärzahl entsprechende Dezimalzahl innerhalb des Ganzzahlbereichs liegt, gibt Binec () den INT -Typ zurück.
Wenn der Wert den Ganzzahlbereich überschreitet, gibt Binec () den Float -Typ zurück.
Bei 64-Bit-Systemen geben nur sehr große Binärzahlen den Schwimmer zurück, während 32-Bit-Systeme einen kleineren Konversionsbereich aufweisen.
Binec () konvertiert einfach die binäre Zeichenfolge in nicht signierte Zahlen, und es gibt kein Konzept von positiven und negativen Vorzeichen in der binären Zeichenfolge. Wenn Sie signierte Binärzahlen verarbeiten müssen, müssen Sie die Konvertierungslogik selbst verarbeiten.
Ausführliche Anweisungen zu Binec () finden Sie im PHP -Handbuch .