C++ - 如何 left/right 循环移位一个位集?

C++ - How to left/right circular shift a bitset?

假设我有一个名为 left28std::bitset<28>。 我正在寻找 left circular shift left28.

经过一些搜索,我遇到了 std::rotl (C++20),但它似乎与 bitset 配合得不好,所以我不知道我该怎么办把它拉下来。

您可以通过组合右移和左移来实现左循环移位

template<size_t N>
std::bitset<N> rotl( std::bitset<N> const& bits, unsigned count )
{
             count %= N;  // Limit count to range [0,N)
             return bits << count | bits >> (N - count);
// The shifted bits ^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^ The wrapped bits
}

请注意,与 std::rotl 不同,此示例中的计数是 unsigned

如果您希望它是 signed,例如 int,请编写一个匹配的 rotr 并让每个函数在 count 为负数时调用另一个函数。