Start · Sprachen · PHP · Referenz · gmp_com

gmp_com

Funktion

Berechnet das bitweise Einerkomplement (NOT) einer GMP-Zahl und gibt das Ergebnis als neues GMP-Objekt zurück.

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_com(GMP|int|string $num): GMP

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

Typ
GMP
Beschreibung
Gibt ein neues GMP-Objekt zurück, das das Einerkomplement der Eingabe darstellt. Bei einem ungültigen Eingabe-String wird ein 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
-6 -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
6 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';
Doppeltes Komplement = Original

// 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.