Signatur
Beschreibung
gmp_popcount() berechnet die sogenannte Popcount (Population Count) einer ganzen Zahl – also die Anzahl der Bits, die in ihrer Binärdarstellung auf 1 gesetzt sind. Diese Operation wird auch als Hamming-Gewicht bezeichnet.
Die Funktion ist besonders nützlich in Bereichen wie Kryptographie, Codierung und Bit-Manipulation, wo es wichtig ist zu wissen, wie viele Bits in einer (potenziell sehr großen) Ganzzahl aktiv sind. Da die GMP-Bibliothek beliebig große Ganzzahlen unterstützt, kann gmp_popcount() im Gegensatz zu nativen PHP-Operatoren auch für Zahlen eingesetzt werden, die den Integer-Bereich von PHP überschreiten.
Bei negativen Zahlen ist das Verhalten zu beachten: GMP behandelt negative Zahlen intern im Zweierkomplement, sodass negative Zahlen konzeptionell unendlich viele gesetzte Bits besitzen. In der Praxis gibt die Funktion für negative Zahlen PHP_INT_MAX zurück (oder einen sehr großen Wert), da die Anzahl der gesetzten Bits als unendlich gilt.
Der Parameter kann als GMP-Objekt, als PHP-Integer oder als numerischer String übergeben werden, was die Integration in bestehende Berechnungen flexibel gestaltet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die Zahl, deren gesetzte Bits gezählt werden sollen. Kann als GMP-Objekt, als PHP-int oder als numerischer String übergeben werden. |
Rückgabewert
1) in der Binärdarstellung der übergebenen Zahl zurück. Der Rückgabewert ist immer ein nicht-negativer Integer. Bei negativen Zahlen wird ein sehr großer Wert (konzeptionell unendlich) zurückgegeben.Beispiele
Popcount einfacher Zahlen berechnen
<?php
// Zahl 0: keine Bits gesetzt
echo gmp_popcount(0) . PHP_EOL; // 0
// Zahl 1 (binär: 1): ein Bit gesetzt
echo gmp_popcount(1) . PHP_EOL; // 1
// Zahl 7 (binär: 111): drei Bits gesetzt
echo gmp_popcount(7) . PHP_EOL; // 3
// Zahl 255 (binär: 11111111): acht Bits gesetzt
echo gmp_popcount(255) . PHP_EOL; // 8
// Zahl 256 (binär: 100000000): ein Bit gesetzt
echo gmp_popcount(256) . PHP_EOL; // 1
Popcount für sehr große Zahlen mit GMP
<?php
// Sehr große Zahl als String: 2^64 - 1 (alle 64 Bits gesetzt)
$bigNum = gmp_init('18446744073709551615');
echo gmp_popcount($bigNum) . PHP_EOL; // 64
// Hamming-Abstand zweier Zahlen berechnen
$a = gmp_init('0b10110110', 2); // binär
$b = gmp_init('0b01101001', 2); // binär
$xor = gmp_xor($a, $b);
$hammingDistance = gmp_popcount($xor);
echo 'Hamming-Abstand: ' . $hammingDistance . PHP_EOL;
// Wichtig · Fallstricke
Negative Zahlen: Da negative Zahlen im Zweierkomplement unendlich viele gesetzte Bits besitzen, gibt gmp_popcount() für negative Eingaben einen sehr großen Wert zurück (in der Regel PHP_INT_MAX oder plattformabhängig den maximal darstellbaren Wert). Negative Zahlen sollten daher vor dem Aufruf entsprechend behandelt werden.
Voraussetzung: Die GMP-Erweiterung muss in der PHP-Installation aktiviert sein. Sie ist seit PHP 5.2 standardmäßig für die meisten Distributionen verfügbar, muss aber gegebenenfalls explizit aktiviert werden (extension=gmp in der php.ini).