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