__builtin_parity(n)
该函数是判断n的二进制中1的个数的奇偶性
1int n = 15; //二进制为1111 2int m = 7; //二进制为111 3cout<<__builtin_parity(n)<<endl;//偶数个1,输出0 4cout<<__builtin_parity(m)<<endl;//奇数个1,输出1
__builtin_popcount(n)
该函数时判断n的二进制中有多少个1
1int n = 15; //二进制为1111 2cout<<__builtin_popcount(n)<<endl;//输出结果为4
__builtin_ctz(n)
该函数判断n的二进制末尾后面0的个数,n=0时结果未定义
1int n = 1; //二进制为1 2int m = 8; //二进制为1000 3cout<<__builtin_ctzll(n)<<endl; //输出0 4cout<<__builtin_ctz(m)<<endl; //输出3
__builtin_clz(n)
n前导0的个数, n=0时结果未定义
1long long n = 1; //二进制为000....001 64位整数 2int m = 8; //二进制为000...1000 32位整数 3cout<<__builtin_clzll(n)<<endl; //输出63 4cout<<__builtin_clz(m)<<endl; //输出28
__builtin_ffs(n)
该函数判断n的二进制末尾最后一个1的位置,从1开始
1int n = 1; //二进制为1 2int m = 8; //二进制为1000 3cout<<__builtin_ffs(n)<<endl;//输出1 4cout<<__builtin_ffs(m)<<endl;//输出4