总结一下位运算的好用函数
这些函数都有相应的usigned long和usigned long long版本,只需要在函数名后面加上l或ll就可以了,比如int __builtin_clzll。
1.int __builtin_clz (unsigned int x)
返回前导0的个数
例如对于
以下输出均为2
int x=3;
cout<<32-__builtin_clz(x)<<endl;
long long x=3;
cout<<64-__builtin_clzll(x)<<endl;
输出为 2
常用于求最高位位数
2.int __builtin_ffs (unsigned int x)
返回最后一位1是第几位
输出为 3
int x=4;
cout<<__builtin_ffs(x)<<endl;
3.int __builtin_ctz (unsigned int x)
返回后面0的个数
输出为 3
int x=8;
cout<<__builtin_ctz(x)<<endl;
4.int __builtin_popcount (unsigned int x)
二进制中1的个数
输出为 3
int x=7;
cout<<__builtin_popcount(x)<<endl;
5.int __builtin_parity (unsigned int x)
二进制中1的个数为偶数或奇数
int n = 15;//二进制为1111
int m = 7;//111
cout<<__builtin_parity(n)<<endl;//偶数个,输出0
cout<<__builtin_parity(m)<<endl;//奇数个,输出1