我正在做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位,而保持最右边的位不变?
任何有用的答案都将不胜感激。谢谢。
发布于 2011-07-10 05:57:53
旋转意味着你基本上是在向左或向右移动,但其他“丢失”的比特将重新出现在另一边。
用十进制数来解释要容易得多:
将123456789向右旋转3位将得到789123456。将123456789向左旋转4位将得到567891234。
所以你需要从一边取n个比特,然后把它们连接到其他比特上。如果你把所有的数字都放在一个圆圈或轮子上,绕着圆心旋转,就更容易理解了。
为了避免混淆,只需将"rotate“替换为"move”或"shift“,并且不要忘记保存否则丢失的位。
发布于 2011-07-10 05:44:04
正确的想法,但另一种方式。
得到最右边的比特。向右移。设置最左边的位。这样做n次。
https://stackoverflow.com/questions/6637578
复制相似问题