Varint64

  ZigZag編碼將帶符號整數映射爲無符號整數,因此具有小絕對值(例如-1)的數字也具有小varint編碼值。

  它以一種在正整數和負整數之間來回“鋸齒”的方式實現,所以-1編碼爲1,1編碼爲2,-2編碼爲3,依此類推可以在下表中看到:

簽名原件             編碼爲
0                     0
-1                     1
1                     2
-2                     3
2147483647     4294967294

-2147483648     4294967295

換句話說,每個值n都使用編碼
(n << 1 )^ (n >> 31 )    
對於sint32s,或者

(n << 1 )^ (n >> 63 ) 

  請注意,第二個轉換 - (n >> 31)部分 - 是一個算術轉換。所以,換句話說,移位的結果要麼是全零位(如果n是正數),要麼全是1位(如果n是負數)。
  當sint32or sint64被解析時,它的值被解碼回原來的簽名版本。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章