This chapter contains information about functions and macros for determining the endianness of integer types and manipulating the bits of unsigned integers. These functions and macros are from ISO C23 and are declared in the header file stdbit.h.
The following macros describe the endianness of integer types. They have values that are integer constant expressions.
This macro represents little-endian storage.
This macro represents big-endian storage.
This macro equals __STDC_ENDIAN_LITTLE__
if integer types are
stored in memory in little-endian format, and equals
__STDC_ENDIAN_BIG__
if integer types are stored in memory in
big-endian format.
The following functions manipulate the bits of unsigned integers.
Each function family has functions for the types unsigned char
,
unsigned short
, unsigned int
, unsigned long int
and unsigned long long int
. In addition, there is a
corresponding type-generic macro (not listed below), named the same as
the functions but without any suffix such as ‘_uc’. The
type-generic macro can only be used with an argument of an unsigned
integer type with a width of 8, 16, 32 or 64 bits, or when using
a compiler with support for
__builtin_stdc_bit_ceil
,
etc., built-in functions such as GCC 14.1 or later
any unsigned integer type those built-in functions support.
In GCC 14.1 that includes support for unsigned __int128
and
unsigned _BitInt(n)
if supported by the target.
unsigned int
stdc_leading_zeros_uc (unsigned char x)
¶unsigned int
stdc_leading_zeros_us (unsigned short x)
¶unsigned int
stdc_leading_zeros_ui (unsigned int x)
¶unsigned int
stdc_leading_zeros_ul (unsigned long int x)
¶unsigned int
stdc_leading_zeros_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_leading_zeros
functions count the number of leading
(most significant) zero bits in x, starting from the most
significant bit of the argument type. If x is zero, they return
the width of x in bits.
unsigned int
stdc_leading_ones_uc (unsigned char x)
¶unsigned int
stdc_leading_ones_us (unsigned short x)
¶unsigned int
stdc_leading_ones_ui (unsigned int x)
¶unsigned int
stdc_leading_ones_ul (unsigned long int x)
¶unsigned int
stdc_leading_ones_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_leading_ones
functions count the number of leading
(most significant) one bits in x, starting from the most
significant bit of the argument type.
unsigned int
stdc_trailing_zeros_uc (unsigned char x)
¶unsigned int
stdc_trailing_zeros_us (unsigned short x)
¶unsigned int
stdc_trailing_zeros_ui (unsigned int x)
¶unsigned int
stdc_trailing_zeros_ul (unsigned long int x)
¶unsigned int
stdc_trailing_zeros_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_trailing_zeros
functions count the number of trailing
(least significant) zero bits in x, starting from the least
significant bit of the argument type. If x is zero, they return
the width of x in bits.
unsigned int
stdc_trailing_ones_uc (unsigned char x)
¶unsigned int
stdc_trailing_ones_us (unsigned short x)
¶unsigned int
stdc_trailing_ones_ui (unsigned int x)
¶unsigned int
stdc_trailing_ones_ul (unsigned long int x)
¶unsigned int
stdc_trailing_ones_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_trailing_ones
functions count the number of trailing
(least significant) one bits in x, starting from the least
significant bit of the argument type.
unsigned int
stdc_first_leading_zero_uc (unsigned char x)
¶unsigned int
stdc_first_leading_zero_us (unsigned short x)
¶unsigned int
stdc_first_leading_zero_ui (unsigned int x)
¶unsigned int
stdc_first_leading_zero_ul (unsigned long int x)
¶unsigned int
stdc_first_leading_zero_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_first_leading_zero
functions return the position of
the most significant zero bit in x, counting from the most
significant bit of x as 1, or zero if there is no zero bit in
x.
unsigned int
stdc_first_leading_one_uc (unsigned char x)
¶unsigned int
stdc_first_leading_one_us (unsigned short x)
¶unsigned int
stdc_first_leading_one_ui (unsigned int x)
¶unsigned int
stdc_first_leading_one_ul (unsigned long int x)
¶unsigned int
stdc_first_leading_one_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_first_leading_one
functions return the position of the
most significant one bit in x, counting from the most
significant bit of x as 1, or zero if there is no one bit in
x.
unsigned int
stdc_first_trailing_zero_uc (unsigned char x)
¶unsigned int
stdc_first_trailing_zero_us (unsigned short x)
¶unsigned int
stdc_first_trailing_zero_ui (unsigned int x)
¶unsigned int
stdc_first_trailing_zero_ul (unsigned long int x)
¶unsigned int
stdc_first_trailing_zero_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_first_trailing_zero
functions return the position of
the least significant zero bit in x, counting from the least
significant bit of x as 1, or zero if there is no zero bit in
x.
unsigned int
stdc_first_trailing_one_uc (unsigned char x)
¶unsigned int
stdc_first_trailing_one_us (unsigned short x)
¶unsigned int
stdc_first_trailing_one_ui (unsigned int x)
¶unsigned int
stdc_first_trailing_one_ul (unsigned long int x)
¶unsigned int
stdc_first_trailing_one_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_first_trailing_one
functions return the position of
the least significant one bit in x, counting from the least
significant bit of x as 1, or zero if there is no one bit in
x.
unsigned int
stdc_count_zeros_uc (unsigned char x)
¶unsigned int
stdc_count_zeros_us (unsigned short x)
¶unsigned int
stdc_count_zeros_ui (unsigned int x)
¶unsigned int
stdc_count_zeros_ul (unsigned long int x)
¶unsigned int
stdc_count_zeros_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_count_zeros
functions count the number of zero bits in
x.
unsigned int
stdc_count_ones_uc (unsigned char x)
¶unsigned int
stdc_count_ones_us (unsigned short x)
¶unsigned int
stdc_count_ones_ui (unsigned int x)
¶unsigned int
stdc_count_ones_ul (unsigned long int x)
¶unsigned int
stdc_count_ones_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_count_ones
functions count the number of one bits in
x.
_Bool
stdc_has_single_bit_uc (unsigned char x)
¶_Bool
stdc_has_single_bit_us (unsigned short x)
¶_Bool
stdc_has_single_bit_ui (unsigned int x)
¶_Bool
stdc_has_single_bit_ul (unsigned long int x)
¶_Bool
stdc_has_single_bit_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_has_single_bit
functions return whether x has
exactly one bit set to one.
unsigned int
stdc_bit_width_uc (unsigned char x)
¶unsigned int
stdc_bit_width_us (unsigned short x)
¶unsigned int
stdc_bit_width_ui (unsigned int x)
¶unsigned int
stdc_bit_width_ul (unsigned long int x)
¶unsigned int
stdc_bit_width_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_bit_width
functions return the minimum number of bits
needed to store x, not counting leading zero bits. If x
is zero, they return zero.
unsigned char
stdc_bit_floor_uc (unsigned char x)
¶unsigned short
stdc_bit_floor_us (unsigned short x)
¶unsigned int
stdc_bit_floor_ui (unsigned int x)
¶unsigned long int
stdc_bit_floor_ul (unsigned long int x)
¶unsigned long long int
stdc_bit_floor_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_bit_floor
functions return the largest integer power
of two that is less than or equal to x. If x is zero,
they return zero.
unsigned char
stdc_bit_ceil_uc (unsigned char x)
¶unsigned short
stdc_bit_ceil_us (unsigned short x)
¶unsigned int
stdc_bit_ceil_ui (unsigned int x)
¶unsigned long int
stdc_bit_ceil_ul (unsigned long int x)
¶unsigned long long int
stdc_bit_ceil_ull (unsigned long long int x)
¶Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.
The stdc_bit_ceil
functions return the smallest integer power
of two that is greater than or equal to x. If this cannot be
represented in the return type, they return zero.