C+中循环移位(旋转)操作的最佳实践

C+中循环移位(旋转)操作的最佳实践

左移和右移操作符(<和>)已经在C+中可用。然而,我无法找到如何执行循环移位或旋转操作。

如何执行“左转”和“右转”等操作?

右转两次

Initial --> 1000 0011 0100 0010

应导致:

Final   --> 1010 0000 1101 0000

举个例子会有帮助。

(编者注:许多常用的用C表示旋转的方式,如果旋转计数为零,或编译成不止一个旋转机器指令,就会有未定义的行为。这个问题的答案应该记录最佳实践。)


拉莫斯之舞
浏览 783回答 3
3回答

DIEA

因为它是C+,所以使用内联函数:template&nbsp;<typename&nbsp;INT>&nbsp;INT&nbsp;rol(INT&nbsp;val)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(val&nbsp;<<&nbsp;1)&nbsp;|&nbsp;(val&nbsp;>>&nbsp;(sizeof(INT)*CHAR_BIT-1));}C+11变式:template&nbsp;<typename&nbsp;INT>&nbsp;constexpr&nbsp;INT&nbsp;rol(INT&nbsp;val)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;static_assert(std::is_unsigned<INT>::value, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Rotate&nbsp;Left&nbsp;only&nbsp;makes&nbsp;sense&nbsp;for&nbsp;unsigned&nbsp;types"); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(val&nbsp;<<&nbsp;1)&nbsp;|&nbsp;(val&nbsp;>>&nbsp;(sizeof(INT)*CHAR_BIT-1));}
打开App,查看更多内容
随时随地看视频慕课网APP