GCC 的 __builtin_clz,__builtin_clzll,__builtin_ctz,__builtin_ctzll 函数原型及 D 语言调用
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 语言的 uint 和 ulong 类型与 C 语言的 unsigned int 和 unsigned long 类型大小可能不同,因此需要使用 cast 进行类型转换。
原文地址: https://www.cveoy.top/t/topic/oqLF 著作权归作者所有。请勿转载和采集!