背景:
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
所以在做位移运算时,一定要注意不同类型最大长度限制。