STL —— 位运算函数之 __builtin_

本文深入解析了GCC编译器中的五个内置函数:__builtin_popcount、__builtin_ffs、__builtin_ctz、__builtin_clz和__builtin_parity。通过具体示例,详细介绍了这些函数如何用于高效地操作二进制数,包括计算二进制中1的数量、查找最低位的1、计数低位连续的0、确定前导0的数量以及判断1的奇偶性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.     __builtin_popcount(unsigned int n)

判断 nnn 的二进制中有多少个 111

int n = 15;	//二进制为1111
cout<< __builtin_popcount(n) <<endl;	//输出4

2.    __builtin_ffs(unsigned int n)

判断 nnn 的二进制末尾最后一个 111 的位置

int n = 1;	//1
int m = 8;	//1000
cout<< __builtin_ffs(n) <<endl;	//输出1
cout<< __builtin_ffs(m) <<endl;	//输出4

3.    __builtin_ctz(unsigned int n)

判断 nnn 的二进制末尾后面 000 的个数

int n = 1;	//1
int m = 8;	//1000
cout<< __builtin_ctzll(n) <<endl;	//输出0
cout<< __builtin_ctz(m) <<endl;	//输出3

4.    __builtin_clz(unsigned int n)

返回前导的 000 的个数

PS:那么用此方法可以计算出第一个1的位置

int n = 1;	//1
int m = 8;	//1000
cout<< 32 - __builtin_clz(n) <<endl;	//输出1
cout<< 64 - __builtin_clzll(m) <<endl;	//输出4

5.    __builtin_parity(unsigned int n)

判断 nnn 的二进制中 111 的个数的奇偶性

int n = 15;	//二进制为1111
int m = 7;	//111
cout<< __builtin_parity(n) <<endl;	//偶数个,输出0
cout<< __builtin_parity(m) <<endl;	//奇数个,输出1
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值