varint---數值壓縮存儲

1.varint 介紹

Varint 是一種緊湊的表示數字的方法。它用一個或多個字節來表示一個數字,值越小的數字使用越少的字節數。這能減少用來表示數字的字節數。比如對於 int32 類型的數字,一般需要 4 個 byte 來表示。但是採用 Varint,對於很小的 int32 類型的數字,則可以用 1 個 byte 來表示

2.詳解

2.1 最高位:

Varint 中的每個 byte 的最高位 bit 有特殊的含義,如果該位爲 1,表示後續的 byte 也是該數字的一部分,如果該位爲 0,則結束。其他的 7 個 bit 都用來表示數字。因此小於 128 的數字都可以用一個 byte 表示。大於 128 的數字,比如 300,會用兩個字節來表示:1010 1100 0000 0010
這裏寫圖片描述

2.2負數

由於負數的高位爲1,所以採用這種壓縮處理的時候必須負數轉成正數,可以通過以下代碼實現int to uint的轉換

private static int Zag(uint ziggedValue)
{
    int value = (int)ziggedValue;
    return (-(value & 0x01)) ^ ((value >> 1) & ~( 1<< 31));
}
private static uint Zig(int value)
{
    return (uint)((value << 1) ^ (value >> 31));

}
發佈了34 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章