Signatur
Beschreibung
gmp_clrbit löscht das Bit an der durch index angegebenen Position in der GMP-Zahl num, d. h. es setzt dieses Bit auf 0. Der Parameter num wird direkt modifiziert (Referenz).
Die Funktion ist nützlich, wenn auf Bit-Ebene mit großen ganzen Zahlen gearbeitet wird – etwa bei kryptographischen Algorithmen, Berechtigungsmasken oder Protokoll-Implementierungen, bei denen Einzelbits gezielt zurückgesetzt werden müssen.
Bits werden ab Position 0 (niedrigstwertiges Bit, LSB) gezählt. Wenn das Bit an der angegebenen Position bereits 0 ist, hat der Aufruf keinen sichtbaren Effekt.
Verwandte Funktionen sind gmp_setbit (setzt ein Bit auf 1) und gmp_testbit (prüft den Wert eines Bits).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die GMP-Zahl, deren Bit gelöscht werden soll. Wird als Referenz übergeben und direkt verändert. Kann ein GMP-Objekt, ein PHP-Integer oder eine numerische Zeichenkette sein. |
|
| $index Pflicht | int | Die 0-basierte Bit-Position, die auf 0 gesetzt werden soll. Muss nicht-negativ sein; ein negativer Wert führt zu einem ValueError. |
Rückgabewert
Beispiele
Einzelnes Bit löschen und Ergebnis prüfen
<?php
// Zahl 0b1111 = 15
$num = gmp_init(15);
echo 'Vor clrbit: ' . gmp_strval($num, 2) . PHP_EOL; // 1111
// Bit 2 (Wert 4) auf 0 setzen => 0b1011 = 11
gmp_clrbit($num, 2);
echo 'Nach clrbit: ' . gmp_strval($num, 2) . PHP_EOL; // 1011
echo 'Dezimalwert: ' . gmp_strval($num) . PHP_EOL; // 11
Berechtigungsmaske: Berechtigung entfernen
<?php
// Berechtigungen als Bitmaske (Bit 0 = Lesen, Bit 1 = Schreiben, Bit 2 = Ausführen)
$permissions = gmp_init(0b111); // alle Rechte gesetzt
echo 'Alle Rechte: ' . gmp_strval($permissions, 2) . PHP_EOL;
// Schreibrecht (Bit 1) entfernen
gmp_clrbit($permissions, 1);
echo 'Ohne Schreiben: ' . gmp_strval($permissions, 2) . PHP_EOL;
// Ausführrecht (Bit 2) entfernen
gmp_clrbit($permissions, 2);
echo 'Nur Lesen: ' . gmp_strval($permissions, 2) . PHP_EOL;
// Nochmals Bit 1 löschen (bereits 0 — kein Effekt)
gmp_clrbit($permissions, 1);
echo 'Unverändert: ' . gmp_strval($permissions, 2) . PHP_EOL;
// Wichtig · Fallstricke
Negativer Index: Seit PHP 8.0 wirft ein negativer Wert für index einen ValueError. In älteren PHP-Versionen konnte das Verhalten undefiniert sein.
Referenzübergabe: Da num per Referenz übergeben wird, verändert gmp_clrbit das Original-Objekt. Wer das ursprüngliche Objekt erhalten möchte, sollte vorher eine Kopie anlegen, z. B. mit gmp_init(gmp_strval($num)).
GMP-Erweiterung erforderlich: Die Funktion setzt voraus, dass PHP mit der GMP-Bibliothek kompiliert wurde (--with-gmp). Auf Systemen ohne GMP steht sie nicht zur Verfügung.