Mögliche Duplikate:
Wie setzt man ein einzelnes Bit in C, löscht es und schaltet es um?
Entfernen des niedrigsten Order-Bits
n
ist eine positive ganze Zahl. Wie kann sein am weitesten rechts gesetztes Bit nicht gesetzt werden?
Sagen Sie n
= 7
= & gt; n = 0111.
Ich möchte 0110
als Ausgabe. Gibt es einen einfachen bitweisen Hack, um das Ziel zu erreichen?
Versuchen Sie n & (n-1)
wobei &
bitweises UND
BEARBEITEN (als Antwort auf den Kommentar von Forest)
%Vor%Ihre Frage ist unklar.
Wenn Sie Bit 0 nur zurücksetzen möchten, finden Sie hier einige Methoden (mit leichten Abweichungen im Verhalten, abhängig von Ihren beteiligten Typen):
%Vor%Wenn Sie das niedrigste Bit unter den gesetzten Bits deaktivieren möchten, haben Sie folgende Möglichkeiten:
%Vor% Beachten Sie, dass x&-x
gleich dem niedrigsten Bit von x
ist, zumindest dann, wenn x
unsigned oder zwei komplementär ist. Wenn Sie eine solche Bit-Arithmetik durchführen möchten, sollten Sie nur vorzeichenlose Typen verwenden, da vorzeichenbehaftete Typen ein implementierungsdefiniertes Verhalten unter bitweisen Operationen haben.
Tags und Links algorithm c math c++ bit-manipulation