clz

rikki cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Apr 1 22:33:31 PDT 2017


On 02/04/2017 6:28 AM, Nicholas Wilson wrote:
> I have this c++ code with clang
>
> uint32_t val = 1111490560;
> int leading_zeros = __builtin_clz( val << 1); // equals 0
> int leading_ones  = __builtin_clz(~val << 1); // equals 1
> return (lz == 0 ? lo - 1 : -lz);
>
> and want to translate it to D.
>
> import core.bitop : bsf,bsr;
>
> uint val = 1111490560;
>
> int leading_zeros_r = bsr( val << 1); // equals 31
> int leading_ones_r  = bsr(~val << 1); // equals 30
> int leading_zeros_f = bsf( val << 1); // equals 23
> int leading_ones_f  = bsf(~val << 1); // equals 1
>
>
> From what I gather from wikipedia I ought to be using bsr. But none of
> them work.
>
> WTF?

BSR looks like its working.

http://x86.renejeschke.de/html/file_module_x86_id_20.html

http://stackoverflow.com/a/9353998


More information about the Digitalmars-d-learn mailing list