国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > stdbit.h 以获得更好的体验。

# C 语言标准库头文件 stdbit.h

请查看 C 语言标准库头文件列表 了解更多相关 API。

这个头文件提供 位操作 的相关功能。例如处理 C 对象的字节序等。

# 示例

#include <stdio.h>
#include <stdbit.h>

int main(void) {
    unsigned int x = 0x0F0F; // 0000111100001111
    
    printf("开头的 0 的位数: %u\n", stdc_leading_zeros(x));
    printf("结尾的 1 的位数: %u\n", stdc_trailing_ones(x));
    printf("1 的总位数: %u\n", stdc_count_ones(x));
    printf("最小位宽度: %u\n", stdc_bit_width(x));
    
    if (__STDC_ENDIAN_NATIVE__ == __STDC_ENDIAN_LITTLE__) {
        printf("系统原生字节序为:小端\n");
    } else if (__STDC_ENDIAN_NATIVE__ == __STDC_ENDIAN_BIG__) {
        printf("系统原生字节序为:大端\n");
    } else {
        printf("系统原生字节序为:未知\n");
    }
    
    return 0;
}

运行结果:

开头的 0 的位数: 20
结尾的 1 的位数: 4
1 的总位数: 8
最小位宽度: 12
系统原生字节序为:小端

#

标准 说明
__STDC_ENDIAN_LITTLE__ C23 小端字节序(低字节存储在低地址)
__STDC_ENDIAN_BIG__ C23 大端字节序(高字节存储在低地址)
__STDC_ENDIAN_NATIVE__ C23 原生字节序
函数 标准 说明
stdc_leading_zeros C23 从最高有效位开始连续的 0 的位数
stdc_leading_ones C23 从最高有效位开始连续的 1 的位数
stdc_trailing_zeros C23 从最低有效位开始连续的 0 的位数
stdc_trailing_ones C23 从最低有效位开始连续的 1 的位数
stdc_first_leading_zero C23 从最高有效位开始第一个 0 所在的位
stdc_first_leading_one C23 从最高有效位开始第一个 1 所在的位
stdc_first_trailing_zero C23 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_one C23 从最低有效位开始第一个 1 所在的位
stdc_count_zeros C23 0 的总位数
stdc_count_ones C23 1 的总位数
stdc_has_single_bit C23 是否只有一位是 1,即是否是 2 的整数次幂
stdc_bit_width C23 表示该值所需要的最少位数
stdc_bit_floor C23 找出不大于给定值的 2 的最大整数次幂
stdc_bit_ceil C23 找出不小于给定值的 2 的最小整数次幂

# 函数

函数 标准 说明
stdc_leading_zeros_uc C23 unsigned char 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_us C23 unsigned short 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_ui C23 unsigned int 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_ul C23 unsigned long 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_ull C23 unsigned long long 从最高有效位开始连续的 0 的位数
stdc_leading_ones_uc C23 unsigned char 从最高有效位开始连续的 1 的位数
stdc_leading_ones_us C23 unsigned short 从最高有效位开始连续的 1 的位数
stdc_leading_ones_ui C23 unsigned int 从最高有效位开始连续的 1 的位数
stdc_leading_ones_ul C23 unsigned long 从最高有效位开始连续的 1 的位数
stdc_leading_ones_ull C23 unsigned long long 从最高有效位开始连续的 1 的位数
stdc_trailing_zeros_uc C23 unsigned char 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_us C23 unsigned short 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_ui C23 unsigned int 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_ul C23 unsigned long 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_ull C23 unsigned long long 从最低有效位开始连续的 0 的位数
stdc_trailing_ones_uc C23 unsigned char 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_us C23 unsigned short 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_ui C23 unsigned int 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_ul C23 unsigned long 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_ull C23 unsigned long long 从最低有效位开始连续的 1 的位数
stdc_first_leading_zero_uc C23 unsigned char 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_us C23 unsigned short 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_ui C23 unsigned int 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_ul C23 unsigned long 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_ull C23 unsigned long long 从最高有效位开始第一个 0 所在的位
stdc_first_leading_one_uc C23 unsigned char 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_us C23 unsigned short 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_ui C23 unsigned int 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_ul C23 unsigned long 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_ull C23 unsigned long long 从最高有效位开始第一个 1 所在的位
stdc_first_trailing_zero_uc C23 unsigned char 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_us C23 unsigned short 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_ui C23 unsigned int 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_ul C23 unsigned long 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_ull C23 unsigned long long 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_one_uc C23 unsigned char 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_us C23 unsigned short 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_ui C23 unsigned int 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_ul C23 unsigned long 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_ull C23 unsigned long long 从最低有效位开始第一个 1 所在的位
stdc_count_zeros_uc C23 unsigned char 中 0 的位数
stdc_count_zeros_us C23 unsigned short 中 0 的位数
stdc_count_zeros_ui C23 unsigned int 中 0 的位数
stdc_count_zeros_ul C23 unsigned long 中 0 的位数
stdc_count_zeros_ull C23 unsigned long long 中 0 的位数
stdc_count_ones_uc C23 unsigned char 中 1 的位数
stdc_count_ones_us C23 unsigned short 中 1 的位数
stdc_count_ones_ui C23 unsigned int 中 1 的位数
stdc_count_ones_ul C23 unsigned long 中 1 的位数
stdc_count_ones_ull C23 unsigned long long 中 1 的位数
stdc_has_single_bit_uc C23 unsigned char 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_us C23 unsigned short 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_ui C23 unsigned int 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_ul C23 unsigned long 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_ull C23 unsigned long long 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_bit_width_uc C23 表示给定 unsigned char 的值所需的最小位宽度
stdc_bit_width_us C23 表示给定 unsigned short 的值所需的最小位宽度
stdc_bit_width_ui C23 表示给定 unsigned int 的值所需的最小位宽度
stdc_bit_width_ul C23 表示给定 unsigned long 的值所需的最小位宽度
stdc_bit_width_ull C23 表示给定 unsigned long long 的值所需的最小位宽度
stdc_bit_floor_uc C23 找出不大于给定 unsigned char 的值的 2 的最大整数次幂
stdc_bit_floor_us C23 找出不大于给定 unsigned short 的值的 2 的最大整数次幂
stdc_bit_floor_ui C23 找出不大于给定 unsigned int 的值的 2 的最大整数次幂
stdc_bit_floor_ul C23 找出不大于给定 unsigned long 的值的 2 的最大整数次幂
stdc_bit_floor_ull C23 找出不大于给定 unsigned long long 的值的 2 的最大整数次幂
stdc_bit_ceil_uc C23 找出不小于给定 unsigned char 的值的 2 的最小整数次幂
stdc_bit_ceil_us C23 找出不小于给定 unsigned short 的值的 2 的最小整数次幂
stdc_bit_ceil_ui C23 找出不小于给定 unsigned int 的值的 2 的最小整数次幂
stdc_bit_ceil_ul C23 找出不小于给定 unsigned long 的值的 2 的最小整数次幂
stdc_bit_ceil_ull C23 找出不小于给定 unsigned long long 的值的 2 的最小整数次幂

# 推荐阅读

本文 更新于: 2025-11-27 09:38:07 创建于: 2025-11-27 09:38:07