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; >> } >