在进行状态压缩的时候经常需要对一个数的二进制形式进行一些操作,这些处理起来也挺麻烦的,gcc提供了几个跟二进制相关的__built_in_函数如下:
int __builtin_clz (unsigned int x):x用二进制表示,前导零的数量
int __builtin_ctz (unsigned int x):x用二进制表示,后缀零的数量
int __builtin_popcount(unsigned int x) :x用二进制表示,1的数量
int __builtin_parity(unsigned int x):x用二进制表示,1的数量的奇偶性
int __builtin_ffs(unsigned int x):x用二进制表示,最后一个1从低位向高位是第几位(也就是除了__builtin_ffs(0)=0外,对其他数都是后缀0的数量+1)