Реализация логического сдвига вправо с использованием только «~ & ^ | + << >> = »операторы и 20 операций

Итак, у меня есть задание, что я должен кодировать функцию в c, которая использует только побитовые операции ~, & , ^, | , +, <<, >> и =. Я должен использовать только 20 операций. И мне не разрешается использовать управляющие структуры, такие как if-else, для while, switch или что-либо еще, что выполняет код в условных блоках. ТакжеТип литья также отсутствует и байты, которые не объявлены в заголовке функции (который мне дан), ограничены 1 байтом или 8-битными значениями; поэтому у меня есть гекс от 0 до FF.

Функция, которую я должен кодировать, - это логический сдвиг вправо. Таким образом, вместо битов, заполняющихся битом знака, они должны заполняться нулями

Вот что я сделал:

int logicalShift(int x, int n) {
    int op=0xFFFFFFFF;
    int tcn=(~n+1);
    int sizeshift=0x20 & tcn;
    op=(opn) + (op));
}

Это то, что я ожидаю получить (для x = 0x80000000 и n = 0x01), я ожидаю получить 0x40000000, что составляет 1073741824 в десятичном виде. Это то, что я получаю. Однако (для x = 0x80000000 и n = 0x0 я ожидаю получить 0x80000000, однако я получаю 0x7fffffff, который является моим ответом минус немного. Я мог бы добавить немного, но это портит первый ответ. Так, что я делаю неправильно что у меня есть один случай, но нет другого. Я тоже пытался.

int logicalShift(int x, int n) {
    int op=0xFFFFFFFF;
    int tcn=(~n+1);
    int sizeshift=0x20 & tcn;
    op=(opn) + (op  ^ ~n));
}

Я думал, что если я XOR набор битов обнулять биты знака со всеми 1 's для случая 0, я бы закончил с чем-то, что не было отрицательным (aka) 0x7fffffff, когда он прошел преобразование компиляторов в 2 'с дополнением. В итоге все стало еще хуже. Пожалуйста, установите меня в правильном направлении, что я должен рассмотреть и почему?

Ответы на вопрос(2)

Ваш ответ на вопрос