- bit[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std {
template <class T>
constexpr T bit_ceil(T x);
}
整数値を2の累乗値に切り上げる。
- 型
T
が符号なし整数型であること
x
以上となる最小の2の累乗値をN
として、型T
において値N
が表現できること
N
を返す
投げない
- 事前条件を満たすこと
- 値
x
を累乗値に切り上げた値が型T
の範囲内で表現できない場合、未定義動作となり、定数式にはならない
#include <iostream>
#include <bit>
void convert_to_pow2(unsigned int x)
{
std::cout << x << "\t : " << std::bit_ceil(x) << std::endl;
}
int main()
{
std::cout << "127\t : " << std::bit_ceil(127u) << std::endl;
for (unsigned int i = 0u; i <= 32u; ++i) {
convert_to_pow2(i);
}
}
- std::bit_ceil[color ff0000]
127 : 128
0 : 1
1 : 1
2 : 2
3 : 4
4 : 4
5 : 8
6 : 8
7 : 8
8 : 8
9 : 16
10 : 16
11 : 16
12 : 16
13 : 16
14 : 16
15 : 16
16 : 16
17 : 32
18 : 32
19 : 32
20 : 32
21 : 32
22 : 32
23 : 32
24 : 32
25 : 32
26 : 32
27 : 32
28 : 32
29 : 32
30 : 32
31 : 32
32 : 32
- C++20
- Clang: 9.0 [mark verified]
- GCC: 9.1 [mark verified]
- Visual C++: ??
- P0556R3 Integral power-of-2 operations
- P1355R2 Exposing a narrow contract for
ceil2
- P1956R1 On the names of low-level bit manipulation functions
--
std::ceil2
からstd::bit_ceil
に名称変更