numeric_bit_width

numeric_bit_width (std::bit_width)

<bit> 헤더에 정의되어 있어요. 값 x를 저장하는 데 필요한 비트 수를 계산해요. 즉 ⌈log₂(x + 1)⌉예요. C++20부터 도입됐어요.

출처: cppreference

본문

template< class T >
constexpr int bit_width( T x ) noexcept;

(C++20부터)

x를 저장하는 데 필요한 비트 수를 계산해요. 즉 ⌈log₂(x + 1)⌉이에요.

매개변수

  • x: 비트 폭을 계산할 값

타입 요구사항

  • T는 부호 없는 정수 타입이어야 오버로드 해석에 참여해요.

반환값

x가 0이면 0. 그 외에는 x의 2 진 로그에 1을 더하고 소수 부분을 버린 값.

주의 (Notes)

이 함수는 return std::numeric_limits<T>::digits - std::countl_zero(x);와 동등해요.

예제

#include <bit>
#include <iostream>

int main()
{
    for (int x : {0, 1, 2, 3, 4, 5, 7, 8, 9})
        std::cout << x << " -> " << std::bit_width((unsigned)x) << '\n';
}

출력:

0 -> 0
1 -> 1
2 -> 2
3 -> 2
4 -> 3
5 -> 3
7 -> 3
8 -> 4
9 -> 4

값을 나태내는 데 필요한 정확한 비트 수(왼쪽의 선행 0을 제외한 유효 비트 수)를 구할 때 유용해요.

더 알아보기 (Learn more)

cppreference