- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
引自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/
我正在使用 GCC 提供的函数 __builtin_clz,它应该计算 unsigned int 中前导零位的数量。但是 __builtin_clz 为输入 0 返回了不正确的值: #include
我有这样的代码: int foo(unsigned long long x) { unsigned int x1 = (unsigned int)(x >> 32); unsigned
GCC (4.6+) __builtin_clz 的实现是什么?它是否对应于 Intel x86_64 (AVX) 上的某些 CPU 指令? 最佳答案 是的,也不是。 CLZ(计数前导零)和 BSR(
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
引自https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html , — Built-in Function: int __builtin_clz (u
背景 长期以来,gcc has been providing许多内置的位旋转函数,特别是尾随和前导 0 位的数量(也适用于 long unsigned 和 long long unsigned ,它们
只有 1 种情况 __builtin_clz 给出错误答案。我很好奇是什么导致了这种行为。 当我使用文字值 0 时,我总是得到预期的 32。但是 0 作为变量会产生 31。为什么存储值 0 的方法很重
我是一名优秀的程序员,十分优秀!