std:: bit_width
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++20)
|
||||
|
(C++23)
|
||||
| Integral powers of 2 | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
bit_width
(C++20)
|
||||
| Rotating | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Counting | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Endian | ||||
|
(C++20)
|
|
헤더 파일에 정의됨
<bit>
|
||
|
template
<
class
T
>
constexpr int bit_width ( T x ) noexcept ; |
(C++20부터) | |
만약 x 가 0이 아니면, 값 x 를 저장하는 데 필요한 비트 수를 계산합니다. 즉, \(1 + \lfloor \log_2(x) \rfloor\) 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 로 변경됨 |
참고 항목
|
(C++20)
|
최상위 비트부터 시작하여 연속된
0
비트의 개수를 셉니다
(함수 템플릿) |