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)