Umkehrbitmuster in C

8

Ich konvertiere eine Zahl in binär und muss putchar verwenden, um jede Zahl auszugeben.

Das Problem ist, dass ich die Reihenfolge umgekehrt bekomme.

Gibt es trotzdem ein Zahlenbitmuster, bevor ich es selbst mache?

Wie in int n hat ein bestimmtes Bitmuster - wie kann ich dieses Bitmuster umkehren?

    
leo 12.02.2010, 16:10
quelle

6 Antworten

9

Es gibt viele Möglichkeiten, dies zu tun, einige sehr schnell. Ich musste nachsehen.

Bits in einem Byte umkehren

%Vor%

Umkehren einer N-Bit-Menge in 5 * lg (N) -Operationen:

%Vor%

Bits in einem Wort nach Lookup-Tabelle umkehren

%Vor%

Weitere Informationen und Referenzen finden Sie Ссылка .

    
Adriaan 12.02.2010 16:35
quelle
5

Bringe Bits von deiner Eingabe weg und drücke sie auf deine Ausgabe. Multiplikation und Division durch 2 sind die Push- und Pop-Operationen. Im Pseudocode:

%Vor%

Siehe Modulo-Operation auf Wikipedia, wenn Sie diesen Operator nicht gesehen haben.

Weitere Punkte:

  • Was würde passieren, wenn du 2 zu 4 änderst? Oder zu 10?
  • Wie wirkt sich das auf den Wert von n aus? Was ist das?
  • Wie könnten Sie bitwise Operatoren ( << , >> , & ) anstelle von divide und modulo verwenden? Würde das schneller machen?
  • Könnten wir einen anderen Algorithmus verwenden, um ihn schneller zu machen? Könnten Nachschlagetabellen helfen?
Mark Byers 12.02.2010 16:22
quelle
2

Lass mich raten: Du hast eine Schleife, die das 0. Bit (n & amp; 1) druckt und dann die Zahl nach rechts verschiebt. Schreiben Sie stattdessen eine Schleife, die das 31. Bit (n & amp; 0x80000000) druckt und die Zahl nach links verschiebt. Bevor Sie diese Schleife ausführen, führen Sie eine weitere Schleife durch, die die Zahl nach links verschiebt, bis das 31. Bit den Wert 1 hat. Wenn Sie das nicht tun, erhalten Sie führende Nullen.

Auch das Umkehren ist möglich. Etwas wie dieses:

%Vor%     
Seva Alekseyev 12.02.2010 16:25
quelle
1

Ich weiß: das ist nicht genau C, aber ich denke, das ist eine interessante Antwort:

%Vor%

Der RCL-Opcode setzt das verschobene Bit in das Übertrags-Flag, dann stellt rcr dieses Bit in umgekehrter Reihenfolge wieder auf ein anderes Register.

    
olivecoder 09.05.2013 19:48
quelle
0

Meine Vermutung ist, dass Sie eine ganze Zahl haben und Sie versuchen, sie in binäre umzuwandeln?

Und die "Antwort" ist ABCDEFG, aber Ihre "Antwort" ist GFEDCBA?

Wenn ja, würde ich den Endian der Maschine, auf der Sie es machen, überprüfen und die Maschine, von der die "Antwort" kam.

    
Daniel 23.02.2010 21:04
quelle
0

Hier sind Funktionen, die ich verwendet habe, um Bits in einem Byte umzukehren und Bytes in einem Quad umzukehren.

%Vor%     
luser droog 18.09.2012 16:38
quelle

Tags und Links