On 30-04-2012 20:17, Timon Gehr wrote:
On 04/30/2012 05:21 PM, Alex Rønne Petersen wrote:
On 30-04-2012 08:37, jerro wrote:
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


The documentation disagrees:
http://dlang.org/expression.html#ShiftExpression

It claims that it always does arithmetic shift and >>> always does
unsigned shift.


http://d.puremagic.com/issues/show_bug.cgi?id=8007

Thanks; these kinds of documentation bugs can cause really nasty misunderstandings.

--
- Alex

Reply via email to