我正在尝试使用C ++编写“位旋转”代码,并希望通过左移来实现。 我不知道如何编写此代码,但是我在维基百科上找到了一小段代码,类似于:
unsigned int rotl(unsigned int value, int shift) {
return (value << shift) | (value >> (sizeof(value) * CHAR_BIT - shift));
}
然后我尝试让它工作,但这段代码没有给我期望的输出。比如,我有数字
unsigned int 12
,在二进制中是1100,当我想使用上面的代码进行位旋转时,通过左移位,输出结果是unsigned int 24
(11000),实际结果应该是unsigned int 9
,因为如果我进行位旋转(左移位),第一个MSB位现在必须成为第一个位,所有其他位都必须向左移动一位。
您能帮忙理解问题所在吗?或者说我做错了什么。
谢谢。
rotl
,您期望得到什么?经典旋转会得到12->24->48->...->3221225472->2147483649->3->6->12...
。您所假设的答案的一种解释可能是12->9->3->6->12...
,但另一种可能是12->9->3->3->3...
。 - MooseBoys