Namespaces
Variants

std::shr

cppreference.net에서
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 비권장)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
스왑 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
일반적인 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <bit>
template< class T, class S >
constexpr T shr( T x, S s ) noexcept;
에 정의됨 (C++29부터)

반환값: ⌊x · 2-s
⌋
음의 무한대 방향으로 버림되며, T에 맞게 잘립니다.

매개변수

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

반환값

⌊x · 2-s
⌋
결과 타입으로 잘린 값.

참고 사항

>> 연산자와 달리, std::shr은 절대 정의되지 않은 동작을 일으키지 않습니다. 이동은 s번 1비트씩 오른쪽으로 이동하거나, -s번 1비트씩 왼쪽으로 이동하는 것처럼 (s가 음수인 경우) 수행되며, -s는 오버플로우될 수 없다는 점이 다릅니다.

기능 테스트 매크로 값 표준 기능
__cpp_lib_bitops 202606L (C++29) 개선된 이동

가능한 구현

template<class T, class S> // TODO: constraints
constexpr T shr(T x, S s) noexcept
{
    constexpr auto width = S(std::numeric_limits<std::make_unsigned_t<T>>::digits);
    if constexpr (std::is_signed_v<S>)
    {
        if (s < 0)
            return s <= -width ? T(0) : x << -s;
    }
    return s >= width ? T(x < 0 ? -1 : 0) : x >> s;
}

예제

참고 항목

(C++29)
정의되지 않은 동작 없이 왼쪽으로 이동
(함수 템플릿)
(C++20)
비트 왼쪽 회전 결과를 계산
(함수 템플릿)
(C++20)
비트 오른쪽 회전 결과를 계산
(함수 템플릿)