nexthexonextbutterflyvolantisyearnyiliashokaindigoapollolandscapecactusmateryicarusfluidmaterial

大家都知道一般整型int占用32位,我们不管如何储存,他都是4个字节,如果我们有一份数据,里面大部分都是很小的数字(8位即可表示),夹杂了一些32位的大数。这个时候应该如何编码,让他占用空间少一点呢?

变长整型出现了,我们把每个字节看作一个单元,用他的最高位来代表一个拓展信息,信息中储存了什么我们先不要管。那么每个字节的有效储存空间其实是7位。

现在我们已经设计出了一种编码方式,他可以表示所有的7位以内的数据,当然这看起来很傻,第一:有一位被浪费了,第二: 他不能表示超过7位的数据。

让我们现在来利用好这个被浪费的位。如果这一位为1,则代表他将和他后面的一个字节组成一个新的数。如果这一位为0,则代表他就是一个数。

当然你还能用连续多个1开头的数据来表示更大的位数。

很明显,我们解决了正数的编码,负数可不行了,负数的开头是1,一个数的前导0可以省略,但是1是不能省略的。

把符号位放到最低位怎么样?完美的解决了。

如此编码,负数也可以用很短的字节表示了,配个变长整型,非常完美。

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!