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

Mir*_*vic 6 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右侧,同时保留最右侧的其余位不变?

任何有用的答案表示赞赏.谢谢.

Mar*_*rio 6

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

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

向右旋转1234567893位将导致789123456.123456789向左旋转4位将导致567891234.

因此,您基本上从一侧获取n位并将它们附加到其他位置.如果你想到坐在圆圈或轮子上的所有数字,你就会更容易理解.

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