numeric_rotr

numeric_rotr (오른쪽 비트 회전)

std::rotr은 x의 값을 s만큼 비트 단위로 오른쪽 회전시킨 결과를 계산하는 함수예요. 오른쪽 순환 시프트라고도 불러요. C++20부터 사용할 수 있어요.

출처: cppreference

본문

<bit> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

template< class T >
constexpr T rotr( T x, int s ) noexcept;

(since C++20)

x의 값을 s만큼 비트 단위로 오른쪽 회전시킨 결과를 계산해요. 이 연산은 오른쪽 순환 시프트라고도 해요.

공식적으로 N을 std::numeric_limits<T>::digits라 하고 r을 s % N이라 해요.

  • r이 0이면 x를 반환해요;
  • r이 양수이면 (x >> r) | (x << (N - r))을 반환해요;
  • r이 음수이면 std::rotl(x, -r)을 반환해요.

매개변수 (Parameters)

  • x — 시프트할 값
  • s — 시프트할 위치 수

타입 요구사항 (Type requirements)

  • T — 오버로드 해석에 참여하려면 부호 없는 정수 타입이어야 해요.

반환값 (Return value)

x를 s만큼 오른쪽 회전시킨 결과예요.

참고 (Notes)

피처 테스트 매크로 표준 기능
__cpp_lib_bitops 201907L (C++20) 비트 연산

예제 (Example)

이 코드를 실행해 봐요.

#include <bit>
#include <bitset>
#include <cstdint>
#include <iostream>

int main()
{
    using bin = std::bitset<8>;
    const std::uint8_t x{0b00011101};
    std::cout << bin(x) << " <- x\n";
    for (const int s : {0, 1, 9, -1, 2})
        std::cout << bin(std::rotr(x, s)) << " <- rotr(x, " << s << ")\n";
}

출력:

00011101 <- x
00011101 <- rotr(x, 0)
10001110 <- rotr(x, 1)
10001110 <- rotr(x, 9)
00111010 <- rotr(x, -1)
01000111 <- rotr(x, 2)

더 알아보기 (Learn more)

cppreference