Sorry, I managed to get myself confused here. What I meant to say was that I think >> should do an arithmetic shift if the operands are signed; unsigned shift otherwise.
It does arithmetic shift if the left operand is signed, unsigned shift otherwise. This code:
void main()
{
int a = 0xffffffff;
uint b = a;
writefln("%x", a >> 1);
writefln("%x", b >> 1);
}
prints
ffffffff
7fffffff
