Signatur
Beschreibung
gmp_com berechnet das Einerkomplement (bitweises NOT) der übergebenen Ganzzahl. Das Einerkomplement einer Zahl n ist mathematisch definiert als -(n + 1), was bei vorzeichenbehafteter Ganzzahl-Arithmetik exakt dem bitweisen NOT entspricht.
Die Funktion arbeitet mit beliebig großen Ganzzahlen über die GMP-Bibliothek (GNU Multiple Precision). Als Eingabe akzeptiert sie ein GMP-Objekt, eine gewöhnliche PHP-int-Ganzzahl oder eine Zeichenkette, die eine gültige Dezimalzahl darstellt. Das Ergebnis wird stets als neues GMP-Objekt zurückgegeben.
Typische Einsatzgebiete sind kryptografische Algorithmen, Netzwerk-Masken-Berechnungen mit großen IP-Blöcken sowie Bit-Manipulationen, die den Wertebereich normaler PHP-Integer sprengen würden.
- Für positive Zahlen liefert
gmp_com(n)immer eine negative Zahl:-(n+1). - Für negative Zahlen liefert
gmp_com(n)immer eine positive Zahl:|n| - 1.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die Zahl, deren Einerkomplement berechnet werden soll. Kann ein GMP-Objekt, ein PHP-int oder eine Dezimalzahl als string sein. |
Rückgabewert
ValueError (ab PHP 8.0) bzw. ein Warnung ausgelöst.Beispiele
Einerkomplement einer positiven Zahl
<?php
$zahl = gmp_init(5);
$komplement = gmp_com($zahl);
echo gmp_strval($komplement); // -(5+1) = -6
// Kurz: direkt mit int
$komplement2 = gmp_com(10);
echo PHP_EOL . gmp_strval($komplement2); // -11
Einerkomplement einer negativen Zahl
<?php
// gmp_com(-n) = n - 1
$negativ = gmp_init(-7);
$komplement = gmp_com($negativ);
echo gmp_strval($komplement); // -(-7) - 1 = 6
$negativ2 = gmp_com(-1);
echo PHP_EOL . gmp_strval($negativ2); // 0
Praxisbeispiel: Doppeltes Komplement ergibt Originalwert
<?php
$original = gmp_init('123456789012345678901234567890');
$komplement = gmp_com($original);
$doppelt = gmp_com($komplement);
echo gmp_strval($original) === gmp_strval($doppelt)
? 'Doppeltes Komplement = Original'
: 'Unterschiedlich';
// Wichtig · Fallstricke
Voraussetzung: Die GMP-Erweiterung muss auf dem Server verfügbar sein (Kompiliert mit --with-gmp). Auf vielen Standard-PHP-Installationen ist sie vorhanden, kann aber fehlen.
Ab PHP 8.0 wird bei einem ungültigen String-Argument ein ValueError geworfen. In älteren Versionen wurde lediglich eine Warnung ausgegeben und false zurückgegeben – was beim Einsatz in strikt typisierten Kontexten zu subtilen Fehlern führen kann.
Das Ergebnis von gmp_com entspricht mathematisch exakt -(n + 1) und ist kein auf eine bestimmte Bit-Breite beschränktes NOT wie in C oder Java, da GMP vorzeichenbehaftete Zahlen beliebiger Länge verwendet.