GCC 编译器内置函数

2025年3月17日 | 阅读 3 分钟

什么是GCC编译器?

GCC代表GNU编译器集合,它是编译器的集合,通常用于C或C++程序中,将代码转换为汇编语言。

GCC提供了许多内置函数,如下所示:

1. __builtin_popcount()

此函数用于返回十进制数中置位(set bits)或1的数量。它接受一个十进制数作为参数,并返回其中1的数量。

众所周知,我们可以用二进制格式表示任何十进制数,即一系列1和0。

例如:int a = 12;

我们可以将12表示为二进制格式的1100,因此给定整数中1的数量为2。

C 语言示例

输出

Builtin functions of GCC compiler

注意:我们可以将此函数用于long和long long数据类型,但函数名称会略有更改。

对于long数据类型:__builtin_popcountl()

对于long long数据类型:__builtin_popcountll()

C 语言示例

输出

Builtin functions of GCC compiler

2. __builtin_parity()

此函数用于确定一个数的奇偶性。奇偶性指置位是偶数还是奇数。如果置位是奇数,则返回true或1。否则,返回false或0。

例如

int num=12;

在上面的例子中,我们可以将12表示为二进制格式的1100,所以它有2个置位,因此对于此示例,上述函数将输出0。

示例

int num=13;

我们可以将13表示为二进制格式的1101,所以它有3个置位,这是奇数,此函数将返回1。

C 语言示例

输出

Builtin functions of GCC compiler

注意:我们可以将此函数用于long和long long数据类型
对于long:__builtin_parityl()
对于long long:__builtin_parityll()

C 语言示例

输出

Builtin functions of GCC compiler

3. __builtin_clz()

此函数用于计算数字中最左置位之前的前导零的数量。

众所周知,我们可以用二进制格式或比特形式表示数字。一个整数占用4字节或32比特,因此我们可以用32比特表示每个整数并指出前导零。

例如

int num =12;

我们可以将12表示为00000000 00000000 00000000 00001100

因此,前导零的数量是28。

C 语言示例

输出

Builtin functions of GCC compiler

同样,我们可以计算long和long long数据类型中的前导零数量。

C 语言示例

输出

Builtin functions of GCC compiler

4. __builtin__ctz()

此函数将返回数字中的尾随零或最右置位右侧零的数量。

例如

int a= 12

二进制表示:00000000 00000000 00000000 00001100

所以尾随零的数量是2。

C 语言示例

输出

Builtin functions of GCC compiler

注意:对于long和long long数据类型,我们可以按如下方式使用此函数
对于long数据类型:__builtin_ctzl()
对于long long数据类型:__builtin_ctzll()

C 语言示例

输出

Builtin functions of GCC compiler