位运算

· · 算法·理论

获取a的第b位:

int getbit(int a,int b) {return (a>>b)&1;}

将a的第b位设置为0:

int unsetbit(int a,int b) {return a&~(1<<b);}

将a的第b位设置为1:

int setbit(int a,int b) {return a|(1<<b);}

将a的第b位取反:

int flapbit(int a,int b) {return a^(1<<b);}

求二进制1的个数:

__builtin_popcount(x);

求二进制末尾0的个数:

__builtin_ctz(x);//如果x==0,则会UB

求二进制有几个前导0:

__builtin_clz(x);//如果x==0,则会UB