https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBDAzgWwB8ABAJgEYBYAKGIGYACMhgYQYG8aHunGBLAHYYGAET4A3UgApBw7AEoGAXgB8DbAwD0DUgG4aAXyA===    It translates it to `(((uint)i >> 31) + i) >> 1)`, which is correct for signed types. presumably it can't rationalise the fact `i` is always positive here