gpt4 book ai didi

delphi - Delphi 中相当于 C __builtin_clz() 的是什么?

转载 作者:行者123 更新时间:2023-12-03 15:54:10 27 4
gpt4 key购买 nike

引自https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html ,

— Built-in Function: int __builtin_clz (unsigned int x) Returns the number of leading 0-bits in x, starting at the most significant bit position. If x is 0, the result is undefined.

Delphi 中相当于 C __builtin_clz() 的是什么?如果没有,如何在Delphi中高效实现?

其实我想用它来计算一个整数的以2为底的对数。

最佳答案

如果您只关心 32 位代码,那么它会像这样:

function __builtin_clz(x: Cardinal): Cardinal;
asm
BSR EAX,EAX
NEG EAX
ADD EAX,32
end;

或者,如果您也想支持 64 位代码,那么:

function __builtin_clz(x: Cardinal): Cardinal;
{$IF Defined(CPUX64)}
asm
BSR ECX,ECX
NEG ECX
ADD ECX,31
MOV EAX,ECX
{$ENDIF}
{$IF Defined(CPUX86)}
asm
BSR EAX,EAX
NEG EAX
ADD EAX,31
{$ENDIF}
end;

asm 大师可能会稍微简化一下,但 BSR(位扫描反向)是关键指令。

对于移动编译器,我不知道如何有效地做到这一点。

关于delphi - Delphi 中相当于 C __builtin_clz() 的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com