背景:
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