Сейчас я читаю книгу Computer Systems: Programmer Perspective.
Одна проблема в книге говорит о том, чтобы выполнить логический сдвиг вправо над целым числом со знаком, я не могу понять, как начать с этого.
Вот собственно вопрос из книги:
Введите код для следующих функций 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; . . . }
Надеюсь, теперь вы поняли вопрос.