Ich versuche, Bit-Umkehrung in einem Byte zu tun. Ich verwende den Code untenBit Umkehrung mit bitweisen
static int BitReversal(int n)
{
int u0 = 0x55555555; // 01010101010101010101010101010101
int u1 = 0x33333333; // 00110011001100110011001100110011
int u2 = 0x0F0F0F0F; // 00001111000011110000111100001111
int u3 = 0x00FF00FF; // 00000000111111110000000011111111
int u4 = 0x0000FFFF;
int x, y, z;
x = n;
y = (x >> 1) & u0;
z = (x & u0) << 1;
x = y | z;
y = (x >> 2) & u1;
z = (x & u1) << 2;
x = y | z;
y = (x >> 4) & u2;
z = (x & u2) << 4;
x = y | z;
y = (x >> 8) & u3;
z = (x & u3) << 8;
x = y | z;
y = (x >> 16) & u4;
z = (x & u4) << 16;
x = y | z;
return x;
}
Es kann das Bit-Umkehrer (auf einer 32-Bit-Maschine), aber es ist ein Problem, Zum Beispiel der Eingabe 10001111101, ich will 10111110001 erhalten, aber diese Methode würde das ganze Byte einschließlich der Überschrift 0s umkehren. Die Ausgabe ist 1011111000100000000000000000000000. Gibt es irgendeine Methode, nur die tatsächliche Zahl umzukehren? Ich möchte es nicht in String und Reverser konvertieren und dann erneut konvertieren. Gibt es eine reine mathematische Methode oder Bit-Operation?
Mit besten Grüßen,
Obwohl ich Ihre Methode verstehe: Es kann nicht kompilieren, da Sie u4 verwenden und in Ihrem Beispiel nicht definiert haben. –
Hinzufügen int u4 = 0x0000FFFF; – user287792
Das ist nicht der Grund, ich vermisse das nur. –