Bit manipulation
Numerics
Collaboration diagram for Bit manipulation:

## Macros

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

## Enumerations

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

## Functions

template<typename _To, typename _From> requires (sizeof(_To) == sizeof(_From)) && __is_trivially_copyable(_To) && __is_trivially_copyable(_From)
constexpr _To | std::bit_cast (const _From &__from) noexcept
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
template<typename _Tp>
constexpr _If_is_unsigned_integer< _Tp, 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
template<typename _Tp>
constexpr _If_is_unsigned_integer< _Tp > | std::rotl (_Tp __x, int __s) noexcept
template<typename _Tp>
constexpr _If_is_unsigned_integer< _Tp > | std::rotr (_Tp __x, int __s) noexcept

## Detailed Description

Utilities for examining and manipulating individual bits.

## Macro Definition Documentation

## __cpp_lib_bit_cast

#define __cpp_lib_bit_cast

Definition at line 69 of file bit.

## __cpp_lib_bitops

#define __cpp_lib_bitops

Definition at line 375 of file bit.

## __cpp_lib_endian

#define __cpp_lib_endian

Definition at line 457 of file bit.

## __cpp_lib_int_pow2

#define __cpp_lib_int_pow2

Definition at line 431 of file bit.

## Enumeration Type Documentation

## endian

enum class 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>
requires (sizeof(_To) == sizeof(_From)) && __is_trivially_copyable(_To) && __is_trivially_copyable(_From)

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

nodiscard 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

Definition at line 81 of file bit.

## bit_ceil()

template<typename _Tp>

_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>

_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>

_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>

_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.

## countl_zero()

template<typename _Tp>

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

constexpr noexcept

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

Definition at line 402 of file bit.

## countr_one()

template<typename _Tp>

_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>

_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>

_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 assume_aligned().

## popcount()

template<typename _Tp>

_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.

## rotl()

template<typename _Tp>

_If_is_unsigned_integer< _Tp > std::rotl | ( | _Tp | __x,
|  | int | __s )

nodiscard constexpr noexcept

Rotate x to the left by s bits.

Definition at line 388 of file bit.

## rotr()

template<typename _Tp>

_If_is_unsigned_integer< _Tp > std::rotr | ( | _Tp | __x,
|  | int | __s )

nodiscard constexpr noexcept

Rotate x to the right by s bits.

Definition at line 394 of file bit.