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位。當然比較極端的是所有的位數都被用上了。