Bit manipulation (since C++20) - cppreference.com

From cppreference.com

Provides several function templates to access, manipulate, and process individual bits and bit sequences.

Defined in header

<bit>

Defined in namespace std

bit_cast

(C++20)

reinterpret the object representation of one type as that of another
(function template)

[edit]

byteswap

(C++23)

reverses the bytes in the given integer value
(function template)

[edit]

Integral powers of 2

has_single_bit

(C++20)

checks if a number is an integral power of 2
(function template)

[edit]

bit_ceil

(C++20)

finds the smallest integral power of 2 not less than the given value
(function template)

[edit]

bit_floor

(C++20)

finds the largest integral power of 2 not greater than the given value
(function template)

[edit]

bit_width

(C++20)

finds the smallest number of bits needed to represent the given value
(function template)

[edit]

Shifting (since C++29)

shl

(C++29)

shifts to the left without the possibility of undefined behavior
(function template)

[edit]

shr

(C++29)

shifts to the right without the possibility of undefined behavior
(function template)

[edit]

Rotating

rotl

(C++20)

computes the result of bitwise left-rotation
(function template)

[edit]

rotr

(C++20)

computes the result of bitwise right-rotation
(function template)

[edit]

Counting

countl_zero

(C++20)

counts the number of consecutive 0 bits, starting from the most significant bit
(function template)

[edit]

countl_one

(C++20)

counts the number of consecutive 1 bits, starting from the most significant bit
(function template)

[edit]

countr_zero

(C++20)

counts the number of consecutive 0 bits, starting from the least significant bit
(function template)

[edit]

countr_one

(C++20)

counts the number of consecutive 1 bits, starting from the least significant bit
(function template)

[edit]

popcount

(C++20)

counts the number of 1 bits in an unsigned integer
(function template)

[edit]

Permutation (since C++29)

bit_reverse

(C++29)

reverses the bits in an integer
(function template)

[edit]

bit_repeat

(C++29)

repeats/broadcasts a bit pattern of specified length
(function template)

[edit]

bit_compress

(C++29)

compresses bits of an operand using a mask (PEXT)
(function template)

[edit]

bit_expand

(C++29)

expands bits from an operand using a mask (PDEP)
(function template)

[edit]

Endian

endian

(C++20)

indicates the endianness of scalar types
(enum)

[edit]

Notes

Feature-test

macro ValueStdFeature

__cpp_lib_bit_cast

201806L

(C++20)std::bit_cast

__cpp_lib_bitops

201907L

(C++20)Bit operations

202606L

(C++29)

Better shifting

202607L

(C++29)

Bit permutation

__cpp_lib_byteswap

202110L

(C++23)std::byteswap

__cpp_lib_int_pow2

202002L

(C++20)

Integral power-of-2 operations

__cpp_lib_stdbit_h

202603L

(C++26)Compatibility header

<stdbit.h>

for C bitwise operations See also