我想这是一个有哲学意味的问题。
C语言有标准的位运算,包括或
、与
、异或
、左/右位移
和非
等。为什么在语言中没有包含旋转左/右操作符或函数呢?
这些运算符的复杂度与其他位运算符相同,并且通常只需要一个类似于其他位运算符的单一汇编指令即可实现。此外,我可以想到许多用途,可能不比xor
运算符少 - 因此,对我来说,它们没有与其他运算符一起包含在C语言中听起来有点奇怪。
如果您需要在C或C++中进行旋转操作, 这里有一个关于最佳实践的专门问答。但讨论这个问题已经超出了本问题的范围。
unsigned int
长度为2的幂且不包含填充位的平台上,左旋转/右旋转是有意义的。在其他平台上则不太合理。标准委员会定义一个只在99%的C平台上有意义的操作,实际上等同于将剩余的1%视为另类。从技术角度来看,对于大多数编译器来说,包含左/右旋转内部函数比识别数百(或数千)种不同的最小复杂度方式的Peephole优化器更容易... - supercat