K & R - Понимание упражнения 2-8: что именно здесь спрашивают? - PullRequest
6 голосов
/ 10 июля 2011

Я работаю над упражнениями из книги K & R. В настоящее время я застрял в упражнении 2-8, которое говорит следующее:

Write a function rightrot(x, n) that returns the value of the integer x rotated to the right by n bit positions.

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

Как или что мне вращать? Должен ли я взять самый левый бит и установить его в крайнее правое положение x, после смещения x влево и повторить это для n бит? Или я беру кусок (n бит) и помещаю его n бит вправо, оставляя остальные самые правые биты неизменными?

Любой полезный ответ приветствуется. Спасибо.

Ответы [ 2 ]

6 голосов
/ 10 июля 2011

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

Гораздо проще объяснить десятичным числом:

Поворот 123456789 вправо на 3 цифры приведет к 789123456. Поворот 123456789 влево на 4 цифры приведет к 567891234.

Таким образом, вы по существу возьмете n битов с одной стороны и прикрепите их к другим. Намного легче понять, если вспомнить все цифры, сидящие на круге или колесе, которые вы вращаете вокруг центра.

Чтобы избежать путаницы, просто замените «rotate» на «move» или «shift» и не забудьте сохранить биты, в противном случае потерянные.

1 голос
/ 10 июля 2011

Правильная идея, но с другой стороны.

Получи самый правый бит. Сдвиг вправо. Установите самый левый бит. Сделайте это n раз.

...