Я работаю над созданием логической функции сдвига справа в 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);
}
Это действительно работает для всех случаев, кроме случаев, когда n = 0. Я пытался выяснить способ исправить это, так что он будет работать и для n = 0, но я застрял.