网站站内优化案例,光明网站建设,广发证券 网站谁做的,学校做网站目录
popcount函数
bitset类模板
__builtin_popcount函数 popcount函数
在C中#xff0c;std::popcount函数是用来计算一个整数二进制表示中包含的1的个数。不过要注意#xff0c;这个函数是C20标准引入的#xff0c;因此在使用之前#xff0c;要先确保编译器支持C20标…目录
popcount函数
bitset类模板
__builtin_popcount函数 popcount函数
在C中std::popcount函数是用来计算一个整数二进制表示中包含的1的个数。不过要注意这个函数是C20标准引入的因此在使用之前要先确保编译器支持C20标准。
使用std::popcount非常简单只需要包含头文件bit然后调用该函数即可。
使用注意 popcount只接收无符号的整数类型unsigned int、unsigned char等不接受任何浮点型的变量。popcount的返回值就是参数中的二进制表示中包含1的个数。 用法示例 #include iostream
#include bit
using namespace std;int main() {unsigned int num 42; // 二进制表示为 101010int count std::popcount(num); cout Number of set bits in num is: count endl;return 0;
}
// 输出结果
/* Number of set bits in 42 is: 3 */ 更多细节见referencestd::popcount - cppreference.com
bitset类模板
bitset是C标准库中的一个类模板用于表示固定大小的位序列。std::bitset是一个非常有用的类模板特别适合处理需要对位进行操作的场景。它提供了方便的方法来设置、获取、计算和转换二进制位序列。
std::bitset可以看作是一个用于表示位序列的容器其中每一位都可以是0或1。它的大小在创建时就确定了并且不能动态地调整大小。
以下是std::bitset的基本用法示例 #include iostream
#include bitsetint main() {// 创建一个包含8位的bitset初始值的二进制表示为 10101010// 其实可以直接 std::bitset8 bits(252); std::bitset8 bits(10101010); // 获取位数int size bits.size();std::cout Size of the bitset: size std::endl;// 获取特定位的值bool bitValue bits[3]; // 获取第4位的值注意索引从右往左数std::cout Bit at position 3: bitValue std::endl;// 设置特定位的值bits[2] 1; // 设置第3位为1std::cout Modified bitset: bits std::endl;// 计算1的个数int count bits.count();std::cout Number of set bits: count std::endl;// 将bitset转换为整数unsigned long long num bits.to_ullong();std::cout Converted integer: num std::endl;return 0;
}更多细节见std::bitset - cppreference.com
__builtin_popcount函数
另外还有一个__builtin_popcount函数可以用来计算一个整数中设置为1的位的数量。它的返回值就是给定整数的二进制表示中1的个数。
用法示例 int __builtin_popcount(unsigned int x); // 适用于32位整数
int __builtin_popcountll(unsigned long long x); // 适用于64位整数但有一个关键点需要注意__builtin_popcount是一种编译器特定的扩展并不是C标准中所包含的在不同的编译器和编程环境中可能表现不一致或不可用。所以__builtin_popcount函数限制了代码的可移植性。