2 Stimmen

Wie kann man mit einzelnen Bits arbeiten?

Mögliches Duplikat:
Erläuterung eines Algorithmus zum Setzen, Löschen und Testen eines einzelnen Bits

Ich habe eine unsigned char . Ich möchte die Bits 2 bis 4 (beginnend mit dem niederwertigsten Bit als 0) in eine andere Datei kopieren. unsigned char als die ersten drei Bits. Zum Beispiel, in

abcdefgh // a,b,c,d,e,f,g,h are 0 or 1

wird

00000def

Ich habe versucht

unsigned char input, output;
output = (input << 3) >> 5;

was nicht funktioniert, aber

output = (input << 3)
output >>= 5;

funktioniert.

Gibt es in C eine Möglichkeit, dies in einer Zeile zu erreichen?

8voto

rsaxvc Punkte 1495

Verschieben, dann den Rest abkleben:

output = ( input >> 2 ) & 0x07;

2voto

Marlon Punkte 19311

Dadurch werden nur die gewünschten Teile ausgewählt und nach rechts verschoben. Es ist der umgekehrte Ansatz von @rsaxvc.

output = (input & 28) >> 2;

0voto

Ian Punkte 3879

Versuchen Sie dies:

unsigned char input, output;
input = 0x12abcdef;
output = ((input & 0x00fff000) >> 3) & 0x00000fff;

Ich glaube nicht, dass man einfach auf derselben Zeile hin- und herschieben kann und davon ausgehen kann, dass jedes Mal, wenn man verschiebt, der Raum mit Nullen aufgefüllt wird, aber das kann compilerabhängig sein, wenn man das tut, bekommt man garantiert das Richtige.

Ich gehe davon aus, dass Sie mit "ersten drei Bits" die 3 niedrigstwertigen Bits meinen, also die ganz linken oder die ersten 3 Bits in Little-Endian-Systemen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X