numeric_bit_floor

numeric_bit_floor (std::bit_floor)

<bit> 헤더에 정의되어 있어요. x가 0이 아니면 x보다 크지 않은 가장 큰 정수 2의 거듭제곱을 계산해요. x가 0이면 0을 돌려줘요. C++20부터 도입됐어요.

출처: cppreference

본문

template< class T >
constexpr T bit_floor( T x ) noexcept;

(C++20부터)

x가 0이 아니면 x보다 크지 않은 가장 큰 정수 2의 거듭제곱을 계산해요. x가 0이면 0을 돌려줘요.

매개변수

  • x: 비교할 값

타입 요구사항

  • T는 부호 없는 정수 타입(즉 unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long)이어야 해요.

예제

#include <bit>
#include <iostream>

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

출력:

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

2의 거듭제곱으로 내림하고 싶을 때 유용해요. bit_ceil과 짝을 이뤄 크기를 2의 거듭제곱으로 반올림·버림할 때 쓰여요.

더 알아보기 (Learn more)

cppreference