Bit manipulation
Numerics
Collaboration diagram for Bit manipulation:

## Macros

#define | __cpp_lib_bit_cast
#define | __cpp_lib_endian
#define | __cpp_lib_int_pow2

## Enumerations

enum class | std::endian { little , big , native }

## Functions

template<typename _To , typename _From >
constexpr _To | std::bit_cast (const _From &__from) noexcept requires(sizeof(_To)
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp > | std::bit_ceil (_Tp __x) noexcept
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp > | std::bit_floor (_Tp __x) noexcept
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp > | std::bit_width (_Tp __x) noexcept
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp, int > | std::countl_one (_Tp __x) noexcept
constexpr _To int | std::countl_zero (_Tp __x) noexcept
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp, int > | std::countr_one (_Tp __x) noexcept
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp, int > | std::countr_zero (_Tp __x) noexcept
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp, bool > | std::has_single_bit (_Tp __x) noexcept
template<typename _Tp >
constexpr _If_is_unsigned_integer< _Tp, int > | std::popcount (_Tp __x) noexcept

## Detailed Description

Utilities for examining and manipulating individual bits.

## Enumeration Type Documentation

## endian

enum std::endian

strong

Byte order constants.

The platform endianness can be checked by comparing `std::endian::native` to one of `std::endian::big` or `std::endian::little`.

Since
  C++20

Definition at line 466 of file bit.

## Function Documentation

## bit_cast()

template<typename _To , typename _From >

constexpr _To std::bit_cast | ( | const _From & | __from | ) |

constexpr noexcept

Create a value of type `To` from the bits of `from`.

Template Parameters

  _To | A trivially-copyable type.

Parameters

  __from | A trivially-copyable object of the same size as `_To`.

Returns
  An object of type `_To`.

Since
  C++20

## bit_ceil()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp> std::bit_ceil | ( | _Tp | __x | ) |

constexpr noexcept

The smallest power-of-two not less than `x`.

Definition at line 442 of file bit.

## bit_floor()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp> std::bit_floor | ( | _Tp | __x | ) |

constexpr noexcept

The largest power-of-two not greater than `x`.

Definition at line 448 of file bit.

## bit_width()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp> std::bit_width | ( | _Tp | __x | ) |

constexpr noexcept

The smallest integer greater than the base-2 logarithm of `x`.

Definition at line 454 of file bit.

## countl_one()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp, int> std::countl_one | ( | _Tp | __x | ) |

constexpr noexcept

The number of contiguous one bits, starting from the highest bit.

Definition at line 408 of file bit.

## countr_one()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp, int> std::countr_one | ( | _Tp | __x | ) |

constexpr noexcept

The number of contiguous one bits, starting from the lowest bit.

Definition at line 420 of file bit.

## countr_zero()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp, int> std::countr_zero | ( | _Tp | __x | ) |

constexpr noexcept

The number of contiguous zero bits, starting from the lowest bit.

Definition at line 414 of file bit.

## has_single_bit()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp, bool> std::has_single_bit | ( | _Tp | __x | ) |

constexpr noexcept

True if `x` is a power of two, false otherwise.

Definition at line 436 of file bit.

Referenced by std::assume_aligned().

## popcount()

template<typename _Tp >

constexpr _If_is_unsigned_integer<_Tp, int> std::popcount | ( | _Tp | __x | ) |

constexpr noexcept

The number of bits set in `x`.

Definition at line 426 of file bit.