C+中循环移位(旋转)操作的最佳实践左移和右移操作符(<和>)已经在C+中可用。然而,我无法找到如何执行循环移位或旋转操作。如何执行“左转”和“右转”等操作?右转两次Initial --> 1000 0011 0100 0010应导致:Final --> 1010 0000 1101 0000举个例子会有帮助。(编者注:许多常用的用C表示旋转的方式,如果旋转计数为零,或编译成不止一个旋转机器指令,就会有未定义的行为。这个问题的答案应该记录最佳实践。)
3 回答
DIEA
TA贡献1820条经验 获得超2个赞
template <typename INT> INT rol(INT val) { return (val << 1) | (val >> (sizeof(INT)*CHAR_BIT-1));}
template <typename INT> constexpr INT rol(INT val) { static_assert(std::is_unsigned<INT>::value, "Rotate Left only makes sense for unsigned types"); return (val << 1) | (val >> (sizeof(INT)*CHAR_BIT-1));}
- 3 回答
- 0 关注
- 811 浏览
添加回答
举报
0/150
提交
取消