K& R - 理解练习2-8:这里究竟是什么问题?

时间:2011-07-09 21:27:42

标签: c bit-shift

我正在完成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 个答案:

答案 0 :(得分:6)

旋转意味着您实际上是向左或向右移动,否则“丢失”的位将重新出现在另一侧。

用十进制数来解释会容易得多:

123456789向右旋转3位数将导致789123456。 将123456789向左旋转4位数将导致567891234

所以你基本上从一边拿n位并将它们连接到其他边。如果你想到坐在圆圈或轮子上的所有数字,你就会更容易理解。

为了避免混淆,只需将“旋转”替换为“移动”或“移位”,不要忘记保存否则丢失的位。

答案 1 :(得分:1)

正确的想法,但另一种方式。

最右边一点。向右转。设置最左边的位。这样做了n次。