MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
位计数函数

计算位中1的个数和前导零个数 更多...

函数

constexpr int popcount32 (const uint32_t x) noexcept
 计算32位整数中1的个数
MSTL_CONSTEXPR14 int clz32 (uint32_t x) noexcept
 计算32位整数前导零的个数
constexpr int popcount (const uintptr_t x) noexcept
 计算整数中1的个数
constexpr int countl_zero (const uintptr_t x) noexcept
 计算整数前导零的个数
constexpr int countl_one (const uintptr_t x) noexcept
 计算整数前导1的个数
constexpr int countr_zero (const uintptr_t x) noexcept
 计算整数尾随零的个数
constexpr int countr_one (const uintptr_t x) noexcept
 计算整数尾随1的个数
constexpr int lowest_set_bit_pos (const intptr_t x) noexcept
 获取最低设置位的位置,从0开始
MSTL_CONSTEXPR14 int highest_set_bit_pos (const intptr_t x) noexcept
 获取最高设置位的位置
MSTL_CONSTEXPR14 bool parity32 (uint32_t x) noexcept
 计算32位整数的奇偶性
constexpr bool parity (const uintptr_t x) noexcept
 计算整数的奇偶性

详细描述

计算位中1的个数和前导零个数

函数说明

◆ clz32()

MSTL_CONSTEXPR14 int clz32 ( uint32_t x)
noexcept

计算32位整数前导零的个数

参数
x32位无符号整数
返回
x中前导零的个数,如果x为0则返回32

使用二分查找法优化前导零计数。

在文件 bit.hpp111 行定义.

被这些函数引用 countl_zero() , 以及 highest_set_bit_pos().

◆ countl_one()

int countl_one ( const uintptr_t x)
constexprnoexcept

计算整数前导1的个数

参数
x无符号整数
返回
x中前导1的个数

通过对x按位取反后计算前导零个数。

在文件 bit.hpp159 行定义.

引用了 countl_zero().

◆ countl_zero()

int countl_zero ( const uintptr_t x)
constexprnoexcept

计算整数前导零的个数

参数
x无符号整数
返回
x中前导零的个数

根据平台位数调用相应的clz函数。

在文件 bit.hpp144 行定义.

引用了 clz32().

被这些函数引用 bit_width() , 以及 countl_one().

◆ countr_one()

int countr_one ( const uintptr_t x)
constexprnoexcept

计算整数尾随1的个数

参数
x无符号整数
返回
x中尾随1的个数

通过对x按位取反后计算尾随零个数。

在文件 bit.hpp181 行定义.

引用了 countr_zero().

◆ countr_zero()

int countr_zero ( const uintptr_t x)
constexprnoexcept

计算整数尾随零的个数

参数
x无符号整数
返回
x中尾随零的个数

使用位运算技巧得到最低有效位的掩码。

在文件 bit.hpp170 行定义.

引用了 popcount().

被这些函数引用 countr_one() , 以及 lowest_set_bit_pos().

◆ highest_set_bit_pos()

MSTL_CONSTEXPR14 int highest_set_bit_pos ( const intptr_t x)
noexcept

获取最高设置位的位置

参数
x有符号整数
返回
最高设置位的位置,如果没有设置位则返回-1

在文件 bit.hpp200 行定义.

引用了 clz32().

◆ lowest_set_bit_pos()

int lowest_set_bit_pos ( const intptr_t x)
constexprnoexcept

获取最低设置位的位置,从0开始

参数
x有符号整数
返回
最低设置位的位置,如果没有设置位则返回-1

在文件 bit.hpp191 行定义.

引用了 countr_zero().

◆ parity()

bool parity ( const uintptr_t x)
constexprnoexcept

计算整数的奇偶性

参数
x无符号整数
返回
如果x中1的个数为奇数返回true,否则返回false

根据平台位数调用相应的奇偶性计算函数。

在文件 bit.hpp252 行定义.

引用了 parity32().

◆ parity32()

MSTL_CONSTEXPR14 bool parity32 ( uint32_t x)
noexcept

计算32位整数的奇偶性

参数
x32位无符号整数
返回
如果x中1的个数为奇数返回true,否则返回false

使用分治法计算奇偶性。

在文件 bit.hpp217 行定义.

被这些函数引用 parity().

◆ popcount()

int popcount ( const uintptr_t x)
constexprnoexcept

计算整数中1的个数

参数
x无符号整数
返回
x中1的个数

根据平台位数调用相应的popcount函数。

在文件 bit.hpp129 行定义.

引用了 popcount32().

被这些函数引用 countr_zero().

◆ popcount32()

int popcount32 ( const uint32_t x)
constexprnoexcept

计算32位整数中1的个数

参数
x32位无符号整数
返回
x中1的个数

使用查表法分别计算4个字节的popcount,然后求和。

在文件 bit.hpp96 行定义.

引用了 _CONSTANTS.

被这些函数引用 popcount().