- bit[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp20[meta cpp]
namespace std {
template <class T>
constexpr int countr_one(T x) noexcept;
}
右から連続した1のビットを数える。
- 型
T
が符号なし整数型であること
値x
の、最下位ビット (LSB, least significant bit) から開始して連続した1ビットの数を返す。
x ==
std::numeric_limits
<T>::
max()
の場合、符号なし整数型T
のビット数が返る。
投げない
#include <cassert>
#include <bit>
#include <cstdint>
int main()
{
auto i = static_cast<std::uint32_t>(0b0000'0000'0000'0000'0000'0000'0000'0111u);
int n = std::countr_one(i);
assert(n == 3);
assert(std::countr_one(static_cast<std::uint32_t>(0u)) == 0);
assert(std::countr_one(static_cast<std::uint32_t>(0b0000'0000'0000'0000'0000'0000'0000'0001u)) == 1);
assert(std::countr_one(static_cast<std::uint32_t>(0b1111'1111'1111'1111'1111'1111'1111'1111u)) == 32);
}
- std::countr_one[color ff0000]
- std::uint32_t[link /reference/cstdint/uint32_t.md]
- C++20
- Clang: 9.0 [mark verified]
- GCC: 9.2 [mark verified]
- Visual C++: ??