GCC 的 __builtin_clz,__builtin_clzll,__builtin_ctz,__builtin_ctzll 函数原型及 D 语言调用

这四个函数的原型分别为:

  • unsigned int __builtin_clz(unsigned int x)
  • unsigned int __builtin_clzll(unsigned long long x)
  • unsigned int __builtin_ctz(unsigned int x)
  • unsigned int __builtin_ctzll(unsigned long long x)

在 D 语言中,可以使用以下方式定义和调用:

extern(C) uint __builtin_clz(uint x);
extern(C) uint __builtin_clzll(ulong x);
extern(C) uint __builtin_ctz(uint x);
extern(C) uint __builtin_ctzll(ulong x);

void main() {
    uint x = 0x12345678;
    auto clz = __builtin_clz(x);
    auto clzll = __builtin_clzll(cast(ulong)x);
    auto ctz = __builtin_ctz(x);
    auto ctzll = __builtin_ctzll(cast(ulong)x);
    writeln(clz, clzll, ctz, ctzll);
}

注意,在 D 语言中需要使用 extern(C) 声明这些函数,以便让编译器正确地处理它们的调用方式。同时,由于 D 语言的 uintulong 类型与 C 语言的 unsigned intunsigned long 类型大小可能不同,因此需要使用 cast 进行类型转换。

GCC 的 __builtin_clz,__builtin_clzll,__builtin_ctz,__builtin_ctzll 函数原型及 D 语言调用

原文地址: https://www.cveoy.top/t/topic/oqLF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录