我有一个问题如下所述:如何在没有嵌入式装配的情况下在C中执行旋转移位.更具体一点,如何旋转32位移位int.
我现在在类型的帮助下解决这个问题long long int,但我觉得它有点难看,想知道是否有更优雅的方法.
亲切的问候.
Ber*_*ron 15
(警告未来的读者):维基百科的代码产生次优的asm(gcc包括分支或cmov).请参阅C++中循环移位(旋转)操作的最佳实践,以实现高效的无UB旋转.
来自维基百科:
unsigned int _rotl(unsigned int value, int shift) {
if ((shift &= 31) == 0)
return value;
return (value << shift) | (value >> (32 - shift));
}
unsigned int _rotr(unsigned int value, int shift) {
if ((shift &= 31) == 0)
return value;
return (value >> shift) | (value << (32 - shift));
}
Run Code Online (Sandbox Code Playgroud)