Namespaces
Variants

std:: bit_width

From cppreference.net
Utilities library
헤더 파일에 정의됨 <bit>
template < class T >
constexpr int bit_width ( T x ) noexcept ;
(C++20부터)

만약 x 가 0이 아니면, 값 x 를 저장하는 데 필요한 비트 수를 계산합니다. 즉, 1 + floor(log 2 (x)) 입니다. 만약 x 가 0이면, 0을 반환합니다.

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

목차

매개변수

x - 부호 없는 정수 값

반환값

x 가 0이면 0; 그렇지 않으면 x 의 밑이 2인 로그에 1을 더하고 소수 부분은 버린 값.

참고 사항

이 함수는 다음과 동일합니다: return std:: numeric_limits < T > :: digits - std:: countl_zero ( x ) ; .

기능 테스트 매크로 표준 기능
__cpp_lib_int_pow2 202002L (C++20) 정수 2의 거듭제곱 연산

예제

#include <bit>
#include <bitset>
#include <iostream>
int main()
{
    for (unsigned x{}; x != 010; ++x)
        std::cout << "bit_width( "
                  << std::bitset<4>{x} << " ) = "
                  << std::bit_width(x) << '\n';
}

출력:

bit_width( 0000 ) = 0
bit_width( 0001 ) = 1
bit_width( 0010 ) = 2
bit_width( 0011 ) = 2
bit_width( 0100 ) = 3
bit_width( 0101 ) = 3
bit_width( 0110 ) = 3
bit_width( 0111 ) = 3

결함 보고서

다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3656 C++20 bit_width 의 반환 타입이 함수 인자의 타입과 동일함 int 로 변경됨

참고 항목

최상위 비트부터 시작하여 연속된 0 비트의 개수를 셉니다
(함수 템플릿)