Skip to content

GCC 中的其他内置函数

位运算

int __builtin_ffs(int x):返回 xx 的二进制末尾最后一个 11 的位置,位置的编号从 11 开始(最低位编号为 11 )。当 xx00 时返回 00

int __builtin_clz(unsigned int x):返回 xx 的二进制的前导 00 的个数。当 xx00 时,结果未定义。

int __builtin_ctz(unsigned int x):返回 xx 的二进制末尾连续 00 的个数。当 xx00 时,结果未定义。

int __builtin_clrsb(int x):当 xx 的符号位为 00 时返回 xx 的二进制的前导 00 的个数减一,否则返回 xx 的二进制的前导 11 的个数减一。

int __builtin_popcount(unsigned int x):返回 xx 的二进制中 11 的个数。

int __builtin_parity(unsigned int x):判断 xx 的二进制中 11 的个数的奇偶性。

这些函数都可以在函数名末尾添加 lll(如 __builtin_popcountll())来使参数类型变为 (unsigned) long(unsigned) long long (返回值仍然是 int 类型)。

由于这些函数是内建函数,经过了编译器的高度优化,运行速度十分快(有些甚至只需要一条指令)。