Excellent. Thanks. Here's a rewrite. The overall alg still seems to work.

EDIT: The above is overly-complicated. All you need do is this:Code:// Logical Right-Shift int lrs(int x, int n) { if (x < 0) { x = (x >> 1) & INT_MAX; n--; } return (n > 0) ? x >> n : x; }

Code:int lrs(int x, int n) { return (int)((unsigned)x >> n); }