On Mon, 19 Apr 2010, Joerg Sonnenberger wrote: > On Sun, Apr 18, 2010 at 10:51:35AM +0000, Alan Barrett wrote: > > Log Message: > > Bitwise operations on signed types are well-defined if the values > > happen to be positive, and indeed the values here were guaranteed > > to be positive, but some compilers complained anyway, so convert > > the bitwise operations to arithmetic operations. > > In that case use an explicit cast to the unsigned type. What you did is > penalize the code for no good reason.
I expect the compiler to be able to figure out that some arithmetic operations involving powers of 2 are equivalent to bitwise operations, and to choose the most appropriate instructions. This expectation is not entirely unjustified; for example, I just verified that "gcc -O2" emits identical code for the following two functions: int f(int i) { if (i < 0) return 0; return i >> 3; } int g(int i) { if (i < 0) return 0; return i / 8; } --apb (Alan Barrett)