C++ 位运算函数

发布于 2021-03-01  9 次阅读


刷力扣的时候发现的,还挺好用的,然而我自己在 Clion 里却用不了,还得研究研究阿巴巴。

int __builtin_popcount(unsigned int x)

返回 x 的二进制表示中 1 的个数。

int n = 15; //二进制为1111 cout<< __builtin_popcount(n); //输出4
Code language: JavaScript (javascript)

int __builtin_parity(unsigned int x)

返回 x 的二进制表示中 1 的个数的奇偶性,奇数返回 1,偶数返回 0。

int n = 15; //二进制为1111 int m = 7; //二进制为111 cout << __builtin_parity(n); //偶数个1,输出0 cout << __builtin_parity(m); //奇数个1,输出1
Code language: JavaScript (javascript)

int __builtin_ffs(unsigned int x)

返回 x 的二进制表示的最后一个 1 的是从后向前第几位,从1开始数,x = 0 时返回 0。

int n = 0; //二进制为0 int m = 8; //二进制为1000 cout<< __builtin_ffs(n); //输出0 cout <<__builtin_ffs(m); //输出4
Code language: JavaScript (javascript)

int __builtin_clz (unsigned int x)

返回 x 的二进制表示的前导 0 的个数,x = 0 时未定义。

int n = 1; //二进制为00000000000000000000000000000001 int m = 8; //二进制为00000000000000000000000000001000 cout<< __builtin_clz(n); //输出31 cout <<__builtin_clz(m); //输出28
Code language: JavaScript (javascript)

int __builtin_ctz (unsigned int x)

返回 x 的二进制表示末尾 0 的个数,x = 0 时未定义。

int n = 1; //二进制为1 int m = 8; //二进制为1000 cout<< __builtin_ctz(n); //输出0 cout <<__builtin_ctz(m); //输出3
Code language: JavaScript (javascript)
这些函数都有相应的 usigned longusigned long long 版本,只需要在函数名后面加上 lll 就可以了,例如 __builtin_clzll(x)