[bit.count] # 22 General utilities library [[utilities]](./#utilities) ## 22.11 Bit manipulation [[bit]](bit#count) ### 22.11.7 Counting [bit.count] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15920) In the following descriptions, let N denote numeric_limits​::​digits[.](#1.sentence-1) [🔗](#itemdecl:1) `template constexpr int countl_zero(T x) noexcept; ` [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15931) *Constraints*: T is an unsigned integer type ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15935) *Returns*: The number of consecutive 0 bits in the value of x, starting from the most significant bit[.](#3.sentence-1) [*Note [1](#note-1)*: Returns N if x == 0[.](#3.sentence-2) — *end note*] [🔗](#itemdecl:2) `template constexpr int countl_one(T x) noexcept; ` [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15951) *Constraints*: T is an unsigned integer type ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))[.](#4.sentence-1) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15955) *Returns*: The number of consecutive 1 bits in the value of x, starting from the most significant bit[.](#5.sentence-1) [*Note [2](#note-2)*: Returns N if x == numeric_limits​::​max()[.](#5.sentence-2) — *end note*] [🔗](#itemdecl:3) `template constexpr int countr_zero(T x) noexcept; ` [6](#6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15971) *Constraints*: T is an unsigned integer type ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))[.](#6.sentence-1) [7](#7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15975) *Returns*: The number of consecutive 0 bits in the value of x, starting from the least significant bit[.](#7.sentence-1) [*Note [3](#note-3)*: Returns N if x == 0[.](#7.sentence-2) — *end note*] [🔗](#itemdecl:4) `template constexpr int countr_one(T x) noexcept; ` [8](#8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15991) *Constraints*: T is an unsigned integer type ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))[.](#8.sentence-1) [9](#9) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L15995) *Returns*: The number of consecutive 1 bits in the value of x, starting from the least significant bit[.](#9.sentence-1) [*Note [4](#note-4)*: Returns N if x == numeric_limits​::​max()[.](#9.sentence-2) — *end note*] [🔗](#itemdecl:5) `template constexpr int popcount(T x) noexcept; ` [10](#10) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L16011) *Constraints*: T is an unsigned integer type ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"))[.](#10.sentence-1) [11](#11) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L16015) *Returns*: The number of 1 bits in the value of x[.](#11.sentence-1)