std::bit_width
| 헤더 <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 로 변경됨 |
참고 항목
|
(C++20)
|
최상위 비트부터 시작하여 연속된
0
비트의 개수를 셉니다
(함수 템플릿) |