Namespaces
Variants

std::shl

cppreference.net에서
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
Swap 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
비트 조작
(C++20)
(C++23)
2의 정수 제곱2
(C++20)
(C++20)
(C++20)
시프트
(C++29)
(C++29)
회전
(C++20)
(C++20)
개수 세기
(C++20)
(C++20)
(C++20)
순열
(C++29)
(C++29)
엔디언
(C++20)
 
헤더 <bit>
template< class T, class S >
constexpr T shl( T x, S s ) noexcept;
(C++29부터)에 정의됨

반환값⌊x × 2s
⌋
결과 타입에 맞게 잘라낸, 음의 무한대 방향으로 반올림한 값입니다. T

매개변수

x - 부호 없는 정수 타입의 값
s - 시프트할 위치 수

반환값

⌊x × 2s
⌋
을 결과 타입으로 자른 값.

참고 사항

<< 연산자와 달리, std::shl는 절대 정의되지 않은 동작을 일으키지 않습니다. 시프트는 한 번에 한 비트씩 왼쪽으로 s번 시프트하거나, -s이 음수인 경우 한 번에 한 비트씩 오른쪽으로 s번 시프트하는 것처럼 수행되지만, -s는 오버플로우될 수 없습니다.

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

가능한 구현

template<class T, class S> // TODO: constraints
constexpr T shl(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(x < 0 ? -1 : 0) : x >> -s;
    }
    return s >= width ? T(0) : x << s;
}

예제

같이 보기

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