size_t + ptrdiff_t

Manu turkeyman at gmail.com
Wed Feb 22 00:44:16 PST 2012


On 22 February 2012 03:31, Juan Manuel Cabo <juanmanuel.cabo at gmail.com>wrote:

> On 02/21/2012 10:13 PM, Sean Kelly wrote:
> > I think this is actually a good thing, since working with unsigned
> integers is a pain.
>
> Yes, I would prefer that msb bit to be the sign too, but behavior might
> depend on it,
> and correctness and predictability is important.
>
> My first code snippet was WRONG (sorry for the noise). And I couldn't even
> reproduce the problem with my VC.
>
> A correct snippet is simply this:
>
>    size_t s = -2;
>
>    if (s > 0) {
>         printf("unsigned");
>    } else {
>         printf("signed");
>    }
>
> Also, the shift operator is does a logical or arithmetic shift depending
> on whether it is signed or unsigned, so the result is different
> if you do
>     s >> 1
> whether s is signed or unsigned.
>

Actually, it doesn't.
It is not defined by C whether it should be arithmetic or logical shift
right, and it is up to the compiler to choose.
Microsoft's PPC compiler produces a *logical* signed shift right for
instance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20120222/feb37212/attachment-0001.html>


More information about the Digitalmars-d mailing list