Bitwise shift operation in C on uint64_t variable
I have the following sample code: uint64_t x, y; x = ~(0xF<<24); y = ~(0xFF<<24); The result would be: x=0xfffffffff0ffffff y=0xfffff Can anyone explain the difference? Why x is calculated over 64 bit and y only on 32? The default operation is 32 bit. x=~(0xf<<24); This code could be disassembled into the following steps: int32_t a; a=0x0000000f; a<<=24; // a=0x0f000000; a=~a; // a=0xf0ffffff; x=(uint64_t)a; // x = 0xfffffffff0ffffff; And, y = ~(0xFF<<24); int32_t a; a=0x000000ff; a<<=24; // a=0xff000000; a=~a; // a=0x00ffffff; x=(uint64_t)a; // x = 0x000000000ffffff; Because 0x0f << 24 is a