# std::popcount

< cpp‎ | numeric

定义于头文件 `<bit>` |  |
template<class T> constexpr int popcount(T x) noexcept; |  | (C++20 起)

返回 `x` 的值中为 1 的位的数量。

此重载仅若 `T` 为无符号整数类型（即 unsigned char 、 unsigned short 、 unsigned int 、 unsigned long 、 unsigned long long 或扩展无符号整数类型）才参与重载决议。

### 参数

x | - | 无符号整数类型的值

### 返回值

x 的值中为 1 的位的数量。

### 示例

    #include <bit>
    #include <bitset>
    #include <cstdint>
    #include <initializer_list>
    #include <iostream>

    int main()
    {
        for (std::uint8_t i : { 0, 0b11111111, 0b00011101 }) {
            std::cout << "popcount(0b" << std::bitset<8>(i) << ") = "
                      << std::popcount(i) << '\n';
        }
    }

输出：

    popcount(0b00000000) = 0
    popcount(0b11111111) = 8
    popcount(0b00011101) = 4

### 参阅

countl_zero (C++20) | 从最高位起计量连续的 0 位的数量 (函数模板)
countl_one (C++20) | 从最高位起计量连续的 1 位的数量 (函数模板)
countr_zero (C++20) | 从最低位起计量连续的 0 位的数量 (函数模板)
countr_one (C++20) | 从最低位起计量连续的 1 位的数量 (函数模板)
has_single_bit (C++20) | 检查一个数是否为二的整数次幂 (函数模板)
count | 返回设置为 true 的位的数量 (`std::bitset<N>` 的公开成员函数)
all any none (C++11) | 检查是否所有、任一或无位被设为 true (`std::bitset<N>` 的公开成员函数)