I wrote the following function:

```
int divideBy2Power(int x, int y) { return (x >> y) + (x < 0 && x << (32 - y)); }

```

which is supposed to compute {x / (2^y)} (rounding towards zero) in an extremely efficient manner (i.e. without branching!)

In testing it works for most inputs, but for `divideBy2Power(-2, 0)` it produces `-1`. Likewise, `x=-1, y=0` produces `0` (not `-1`). It works for bunches of other negative numbers. 

I'm on a 32-bit machine and I checked that `x << 32` produces zero. 

Any ideas?