zig-zag:就是把(-1)1000 0001变成0000 0011,注意最后一个1是符号位,也就是2,那么如果是个int32的话,1000 0000 0000 0000 0000 0000 0000 0001 就变成了000 0000 0000 0000 0000 0000 0000 00011,那么也就是11了,那么可以节约很多符号位。
http://goo.gl/2wRKb用位运算来表示把一个负数转换成zig-zag编码,就是
int32是:(n << 1) ^ (n >> 31)
int64是:
(n << 1) ^ (n >> 63)
也就是说,如果是负数,对于32位最多能省去30格(其中1格是符号位,另一个代表最小值1,此处假设“正负0”不合法)。同理,64位最多能省去62位。当然比较极端的是所有的位数都被用上了。