Re: portable way to get highest bit set?
jak <[email protected]> Thu, 12 Oct 2023 13:35:01 +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: > >> 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: > > I know the reason. I was just pointing out that you need to at least > test the boundary cases! > I am sure you knew and I have verified that the problem persists up to "~0UL - 10000" but I don't find an elegant way, type independent, to work around... just adding an 'if' or a ternary operator.