# 22 General utilities library [utilities]

## 22.15 Bit manipulation [bit]

### 22.15.7 Counting [bit.count]

In the following descriptions, let N denote numeric_limits<T>​::​digits.
```template<class T> constexpr int countl_zero(T x) noexcept; ```
Constraints: T is an unsigned integer type ([basic.fundamental]).
Returns: The number of consecutive 0 bits in the value of x, starting from the most significant bit.
[Note 1:
Returns N if x == 0.
â€” end note]
```template<class T> constexpr int countl_one(T x) noexcept; ```
Constraints: T is an unsigned integer type ([basic.fundamental]).
Returns: The number of consecutive 1 bits in the value of x, starting from the most significant bit.
[Note 2:
Returns N if x == numeric_limits<T>​::​max().
â€” end note]
```template<class T> constexpr int countr_zero(T x) noexcept; ```
Constraints: T is an unsigned integer type ([basic.fundamental]).
Returns: The number of consecutive 0 bits in the value of x, starting from the least significant bit.
[Note 3:
Returns N if x == 0.
â€” end note]
```template<class T> constexpr int countr_one(T x) noexcept; ```
Constraints: T is an unsigned integer type ([basic.fundamental]).
Returns: The number of consecutive 1 bits in the value of x, starting from the least significant bit.
[Note 4:
Returns N if x == numeric_limits<T>​::​max().
â€” end note]
```template<class T> constexpr int popcount(T x) noexcept; ```
Constraints: T is an unsigned integer type ([basic.fundamental]).
Returns: The number of 1 bits in the value of x.