- bit[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std {
template <class T>
constexpr bool has_single_bit(T x) noexcept;
}
1ビットだけ立っている値をもっているか判定する。
符号なし整数値にこの関数を適用することで、整数値が2の累乗かを判定することができる。
- 型
T
が符号なし整数型であること
x
の値が1ビットだけ立っていればtrue
、そうでなければfalse
を返す。
投げない
#include <iostream>
#include <bit>
void check_pow2(unsigned int x)
{
std::cout << x << "\t : " << std::has_single_bit(x) << std::endl;
}
int main()
{
std::cout << std::boolalpha;
if (std::has_single_bit(128u)) {
std::cout << "128 is power of 2" << std::endl;
}
check_pow2(0u);
check_pow2(3u);
check_pow2(0xffu);
std::cout << "---" << std::endl;
check_pow2(1u);
for (unsigned int i = 2u; i <= 1024u; i *= 2) {
check_pow2(i);
}
}
- std::has_single_bit[color ff0000]
128 is power of 2
0 : false
3 : false
255 : false
---
1 : true
2 : true
4 : true
8 : true
16 : true
32 : true
64 : true
128 : true
256 : true
512 : true
1024 : true
- C++20
- Clang:
- GCC: 9.1 [mark verified]
- Visual C++: ??
- P0556R3 Integral power-of-2 operations
- P1956R1 On the names of low-level bit manipulation functions
--
std::ispow2
からstd::has_single_bit
に名称変更