Estoy trabajando para hacer una función lógica de desplazamiento a la derecha en C usando solo operadores bit a bit. Aquí es lo que tengo:Implementando el desplazamiento lógico a la derecha en C
int logical_right_shift(int x, int n)
{
int size = sizeof(int); // size of int
// arithmetic shifts to create logical shift, return 1 for true
return (x >> n) & ~(((x >> (size << 3) - 1) << (size << 3) -1)) >> (n-1);
}
En realidad, esto funciona para todos los casos, excepto si n = 0. he estado tratando de encontrar una forma de solucionarlo por lo que funciona para n = 0, así, pero yo estoy atrapado.
que estás cometiendo un operador lógico desplazamiento a la derecha para un tipo firmado? –
¿Qué pasa con 'if (n == 0) {return x; } '? –
Usando la sugerencia de @Mark, puede cambiarlo a esto (no hay garantías de que funcione): 'return (n == 0? X: (x >> n) & ~ (((x >> (size << 3) - 1) << (tamaño << 3) -1)) >> (n-1)); ' –