Lösche das ganz rechts gesetzte Bit [duplizieren]

8
  

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?

    
Edward Norton 16.01.2011, 05:24
quelle

3 Antworten

18

Versuchen Sie n & (n-1) wobei & bitweises UND

ist %Vor%

BEARBEITEN (als Antwort auf den Kommentar von Forest)

%Vor%     
Prasoon Saurav 16.01.2011 05:26
quelle
4

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.

    
R.. 16.01.2011 05:45
quelle
0
%Vor%     
Joe W 16.01.2011 05:44
quelle