for this

        uvlong u, i;

        i = 31;
        u = 0xff00000000000000ull;

i get

        u & 1<<i                -> 0xff00000000000000ull
        u & 0x80000000          -> 0
        u & (int)0x80000000     -> 0xff00000000000000ull
        u & -2147483648         -> 0

to put a finer point on it,

        (uvlong)(1<<i)          -> 0xffffffff80000000
        (uvlong)(0x80000000)    -> 0x80000000
        (uvlong)(int)0x80000000 -> 0xffffffff80000000
        (uvlong)-2147483648     -> 0x80000000

so it seems clear that constants are treated as if unsigned, regardless,
but variables are not?

can this be correct?  i hate to hazzard guesses about the c standard.

- erik

Reply via email to