Estoy intentando hacer la inversión de bit en un byte. Yo uso el siguiente códigoReversión de bits usando bitwise
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;
}
Puede inversor de la broca (en una máquina de 32 bits), pero hay un problema, Por ejemplo, la entrada es 10001111101, quiero conseguir 10111110001, pero este método revertiría todo el byte, incluido el título 0s. La salida es 10111110001000000000000000000000. ¿Hay algún método para invertir solo el número real? No quiero convertirlo en cadena e inversor, luego convertir de nuevo. ¿Hay algún método matemático puro o método de operación de bits?
Best Regards,
A pesar de que entiendo su método: no se puede compilar ya que usa u4 y no lo ha definido en su ejemplo. –
Agregar int u4 = 0x0000FFFF; – user287792
Esta no es la razón, solo lo extraño. –