- bit[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std {
template <class T>
constexpr bool ispow2(T x) noexcept;
}
整数値が2の累乗かを判定する。
- 型
T
が符号なし整数型であること
x
が2の累乗値であればtrue
、そうでなければfalse
を返す。
投げない
#include <iostream>
#include <bit>
void check_pow2(unsigned int x)
{
std::cout << x << "\t : " << std::ispow2(x) << std::endl;
}
int main()
{
std::cout << std::boolalpha;
if (std::ispow2(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::ispow2[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, C++20 mode:
- GCC, C++20 mode: 9.1
- Visual C++: ??