Namespaces
Variants

std::bit_width

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의 정수 거듭제곱
(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 >
constexpr int bit_width( T x ) noexcept;
에 정의됨 (C++20부터)

만약 x이 0이 아니면, 값 x을 저장하는 데 필요한 비트 수를 계산합니다. 즉, 1 + floor(log2(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 ​ 비트의 개수를 셉니다
(함수 템플릿)