Bitwise shift operation in C on uint64_t variable

前端 未结 4 2048
半阙折子戏
半阙折子戏 2021-01-20 02:21

I have the following sample code:

uint64_t x, y;
x = ~(0xF<<24);
y = ~(0xFF<<24);

The result would be:

x=0xffff         


        
4条回答
  •  耶瑟儿~
    2021-01-20 03:06

    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;
    

提交回复
热议问题