您好,登錄后才能下訂單哦!
ZigZag編碼是什么?可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
在網(wǎng)絡(luò)傳輸和數(shù)據(jù)存儲場景中,需要對數(shù)據(jù)進行壓縮。數(shù)據(jù)壓縮的算法非常多,但大部分的數(shù)據(jù)壓縮算法的原理是通過某種編碼方式不存儲數(shù)據(jù)中的0比特位,因此0比特位越多,數(shù)據(jù)壓縮的效果越好。ZigZag編碼就是一種增加0比例位的編碼方式。
假設(shè)數(shù)據(jù)類型為byte的正數(shù)11,其二進制表示為:00001011
數(shù)據(jù)左移一位:00010110
符號位(正數(shù)的符號為0)放到最后一位:00010110
假設(shè)數(shù)據(jù)類型為byte的負(fù)數(shù)-11,其二進制在計算機中是用補碼表示的,計算過程如下。
正數(shù)原碼:00001011
。
反碼:11110100
補碼(反碼加1):11110101
處理過程:
左移一位:11101010
符號位放到最后一位:11101011
除最后一位外全部取反:00010101
正數(shù)經(jīng)過處理后,前導(dǎo)0和后置0的個數(shù)不變。但是負(fù)數(shù)經(jīng)過處理后,增加了三個前導(dǎo)0,可以用于壓縮。
結(jié)合兩種情況得出byte類型數(shù)據(jù)的編碼公式:
ZigZag(n) = n>>7 ^ n<<1
-11的處理過程如下:
11110101 >> 7 = 11111111
11110101 << 1 = 11101010
11111111^11101010 = 00010101
ZigZag的逆函數(shù):
ZigZag?1(n)ZigZag?1(n)=(n>>>1)^ -(n&1)
負(fù)數(shù)00010101
的解碼過程:
n>>>1:00001010
n&1:00000001
-(n&1):11111111
1111111^0000101=11110101
看完上述內(nèi)容,你們對ZigZag編碼有進一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。