Выполнить логический сдвиг с помощью оператора арифметического сдвига в C [дубликат]

На этот вопрос уже есть ответ здесь:

Реализация логического правого сдвига в C 8 ответов

Щас читаю книгуКомпьютерные системы: перспектива программиста.

Одна проблема в книге говорит, что я могу выполнить логическое смещение вправо со знаком со знаком,не могу понять, с чего начать.

Ниже актуальный вопрос из книги:

Введите код для следующих функций C.

функцияsrl выполняет логическое смещение вправо, используя арифметическое смещение вправо (определяется значениемxsra), за которыми следуют другие операции, не включая правые сдвиги или деление.

функцияsra выполняет арифметическое смещение вправо, используя логическое смещение вправо (определяется значениемxsrl), за которыми следуют другие операции, не включая правые сдвиги или деление.

Вы можете использовать вычисления8*sizeof(int) определитьwколичество бит в типе данныхint, Смена суммыk может варьироваться от0 кw − 1

unsigned srl(unsigned x, int k) {
    /* Perform shift arithmetically */
    unsigned xsra = (int) x >> k;
    .
    .
    .
}

int sra(int x, int k) {
    /* Perform shift logically */
    int xsrl = (unsigned) x >> k; 
    .
    .
    .
}

Надеюсь, теперь вы понимаете вопрос.

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

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