Re: portable way to get highest bit set?

jak <[email protected]> Thu, 12 Oct 2023 09:14:43 +0200
Newsgroups comp.lang.c,alt.comp.lang.c
Organization A noiseless patient Spider
Message-ID <[email protected]>
Ben Bacarisse ha scritto:
> jak <[email protected]> writes:
> 
>> candycanearter07 ha scritto:
>>> Hi,
>>> What is the best/most portable way to get the highest bit set?
>>> ie. 011010001
>>> to  010000000
>>
>> Hi,
>> I don't think it's the best but the most portable could be the
>> mathematical approach:
>>
>> #include <stdio.h>
>> #include <math.h>
>>
>> int main()
>> {
>>      unsigned long val = 3000, ret;
> 
> Test case: val = 0xFFFFFFFFFFFFFFFF

This is due to the approximation of the floating point:

log(18446744073709541615) / log(2) =
63.99999999999999921849

> 
>>      ret = (unsigned long)pow(2., (double)(unsigned long)(log((double)val) /
>>     log(2.)));
>>
>>      printf("%lu -> %lu", val, ret);
>>
>>      return 0;
>> }
>