文章目录
C++高效位运算函数之__builtin_
该函数由GCC内建函数,不需要包含额外的头文件
1、__builtin_popcount(n)
该函数判断n的二进制表示中1的个数
int n = 489;//二进制为111101001
cout << __builtin_popcount(n) << '\n';//输出为6
需要注意的是:
对于不同的数据类型,该函数有所改变;
int 类型数据,应使用 __builtin_popcount() ;
long int 类型数据,应使用 __builtin_popcountl() ;
long long int 类型数据,应使用 __builtin_popcountll();
2、__builtin_parity(n)
该函数判断n的二进制表示中1的个数的奇偶性;
奇数个1,则输出1;偶数个1,则输出0
int n = 489;//二进制表示为111101001
int m = 488;//二进制表示为111101000
cout << __builtin_parity(n) << '\n';//偶数个1,输出为0
cout << __builtin_parity(m) << '\n';//奇数个1,输出为1
3、__builtin_ffs(n)
该函数返回n的二进制表示中末尾1的位置,从1开始计数
int n = 489;//二进制表示为111101001
int m = 488;//二进制表示为111101000
cout << __builtin_ffs(n) << '\n';//输出为1
cout << __builtin_ffs(m) << '\n';//输出为4
4、__builtin_ctz(n)
该函数判断n的二进制表示中末尾0的个数;
当n为0时,和n的奇偶性有关
int n = 489;//二进制表示为111101001
int m = 488;//二进制表示为111101000
cout << __builtin_ctz(n) << '\n';//输出为0
cout << __builtin_ctz(m) << '\n';//输出为3