On Tue, Aug 11, 2009 at 06:52:35AM +0000, Chris Miller wrote:
> >> private int roundDown(int val) {
> >> return val >> SHIFT << SHIFT;
> >> }
> > I would write this as
> >
> > return val & ~(1 << SHIFT);
>
> That's not the same thing though. I assume you really mean:
>
> return val & ~((1 << SHIFT) - 1);
>
> And in fact that's what was there originally for positive numbers. Negative
> numbers were handled differently, for reasons I don't understand (hence why
> I'm asking on here).
Oh, sorry, you are right, I forgot the -1.
> I think I still prefer val >> SHIFT << SHIFT, it's clearer what's happening
> (to me at least, I appreciate everything thinks about these things
> differently).
> It's also fewer clock cycles unless you're on a 286 or lower ;) Though the
> clock cycle argument isn't relevant here, the code is only called twice
> during
> the entire split!
If that is the case, then it is better to aim for readability and
maintainability. The bit-shifting expression should be easier to read
than the monster bit-masking expression. And because you are shifting
the same amount right and left, it won't matter whether you are using
arithmetic or logical right shift (>>> or >> in Java).
Sorry for the noise.
Marko
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev