慎用数字的位移运算

    xiaoxiao2021-03-26  6

    背景:

    u_int64 key ; int  a = 65536 + 1 ; key = ( a << 16 ) + 1 ; u_int64 key2 ; b =   1 ; key2 = ( b << 16 ) + 1 ;

    试问key和key2值是否一样,分别为多少

    答案:一样,都是65537

    解析:a用二进制来表示:0000 0000 0000 0001 0000 0000 0000 0001

    a左移16位后1000 0000 0000 0001,最高位1会被移出去,而最低位的1会到17位上去。还是0000 0000 0000 0001 0000 0000 0000 0001

    b 用二进制来表示:0000 0000 0000 0000 0000 0000 0000 0001

    b左移16位后0000 0000 0000 0001 0000 0000 0000 0000 (65536)

    再加1 也是65537

    所以在做位移运算时,一定要注意不同类型最大长度限制。

    转载请注明原文地址: https://ju.6miu.com/read-600246.html

    最新回复(0)