Namespaces
Variants

std:: rotr

From cppreference.net
Utilities library
헤더에 정의됨 <bit>
template < class T >
constexpr T rotr ( T x, int s ) noexcept ;
(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 ) 를 반환합니다.

이 오버로드는 다음 조건에서만 오버로드 해결에 참여합니다: T 가 부호 없는 정수 타입인 경우 (즉, unsigned char , unsigned short , unsigned int , unsigned long , unsigned long long , 또는 확장 부호 없는 정수 타입).

목차

매개변수

x - 부호 없는 정수형의 값
s - 이동할 위치 수

반환값

x s 위치만큼 비트 단위로 오른쪽 회전한 결과입니다.

참고 사항

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

예제

#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)

참고 항목

(C++20)
비트 단위 왼쪽 회전 결과를 계산함
(함수 템플릿)
이진 왼쪽 시프트와 오른쪽 시프트를 수행함
( std::bitset<N> 의 public 멤버 함수)