On 1/19/15 12:35 PM, Jonathan M Davis via Digitalmars-d-learn wrote:
On Monday, January 19, 2015 08:30:47 Steven Schveighoffer via
Digitalmars-d-learn wrote:
http://dlang.org/phobos/core_bitop.html#.bsr
It's actually an intrinsic, reduces to an instruction. Mind the
requirements for 0.
Sadly, I don't think that it have occurred to me from just reading the docs
that that function would tell you how many bits it took to hold the value -
though I don't know what else you'd use it for. In any case, thanks for the
tip.
- Jonathan M Davis
It tells you the most significant bit that is set. That is what you are
looking for, no?
Code:
import core.bitop;
import std.stdio;
void main()
{
foreach(x; 1..100)
writefln("x=%s, bsr(x)=%s", x, bsr(x)+1);
}
From the examples:
value-set => bits
=================
0,1 => 1 (*)
0,1,2 => 2
0,1,2,3 => 2 (*)
0,1,2,3,4 => 3
0,1,2,3,4,5 => 3
0,1,2,3,4,5,6 => 3
0,1,2,3,4,5,6,7 => 3 (*)
0,1,2,3,4,5,6,7,8 => 4
Output from test program:
x=1, bsr(x)=1
x=2, bsr(x)=2
x=3, bsr(x)=2
x=4, bsr(x)=3
x=5, bsr(x)=3
x=6, bsr(x)=3
x=7, bsr(x)=3
x=8, bsr(x)=4
...
Looks the same to me.
If you want the extra info of whether it's the full set (i.e. the *
elements above), then you can do simple x & (x+1) == 0.
-Steve