Arithmetic bit-shift on a signed integer

前端 未结 6 1370
别跟我提以往
别跟我提以往 2020-11-22 07:36

I am trying to figure out how exactly arithmetic bit-shift operators work in C, and how it will affect signed 32-bit integers.

To make things simple, let\'s say we w

6条回答
  •  盖世英雄少女心
    2020-11-22 07:48

    On my i7:

    uint64_t:

    0xffffffffffffffff >> 0 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 1 is 0b0111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 2 is 0b0011111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 3 is 0b0001111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 4 is 0b0000111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 62 is 0b0000000000000000000000000000000000000000000000000000000000000011
    0xffffffffffffffff >> 63 is 0b0000000000000000000000000000000000000000000000000000000000000001
    0xffffffffffffffff >> 64 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 65 is 0b0111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 66 is 0b0011111111111111111111111111111111111111111111111111111111111111
    

    int64_t -1

    0xffffffffffffffff >> 0 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 1 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 2 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 3 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 4 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 62 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 63 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 64 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 65 is 0b1111111111111111111111111111111111111111111111111111111111111111
    0xffffffffffffffff >> 66 is 0b1111111111111111111111111111111111111111111111111111111111111111
    

    int64_t 2^63-1

    0x7fffffffffffffff >> 0 is 0b0111111111111111111111111111111111111111111111111111111111111111
    0x7fffffffffffffff >> 1 is 0b0011111111111111111111111111111111111111111111111111111111111111
    0x7fffffffffffffff >> 2 is 0b0001111111111111111111111111111111111111111111111111111111111111
    0x7fffffffffffffff >> 3 is 0b0000111111111111111111111111111111111111111111111111111111111111
    0x7fffffffffffffff >> 4 is 0b0000011111111111111111111111111111111111111111111111111111111111
    0x7fffffffffffffff >> 62 is 0b0000000000000000000000000000000000000000000000000000000000000001
    0x7fffffffffffffff >> 63 is 0b0000000000000000000000000000000000000000000000000000000000000000
    0x7fffffffffffffff >> 64 is 0b0111111111111111111111111111111111111111111111111111111111111111
    0x7fffffffffffffff >> 65 is 0b0011111111111111111111111111111111111111111111111111111111111111
    0x7fffffffffffffff >> 66 is 0b0001111111111111111111111111111111111111111111111111111111111111
    

提交回复
热议问题