Elias gamma code(eliasγ码/以利亚加玛码) 一种正整数通用编码

Elias Gamma编码是一种用于正整数的变长编码方式,由Peter Elias发明。它通过在每个数的有效位前放置[有效位个数-1]个0来实现编码,减少了空间占用。Cocos2dx中的CCBReader使用此编码解码ccbi文件中的整数。解码时,通过统计0的个数确定有效位的数量。虽然不适用于0和负数,但可以通过转换策略进行处理。
摘要由CSDN通过智能技术生成

Elias gamma code

1.简介

Elias gamma code 是一种用于正整数的通用编码,由Peter Elias发明。常被用于无法事先得知上界的正整数,即一种变长编码方式。
CocosBuilder的ccb文件中的整数正是采用了这种编码方式,被编码到了ccbi文件中(ccbi是二进制文件)。
在Cocos2dx引擎中,CCBReader利用了Elias gamma code 的解码方式,将ccbi文件中的整数解析出来。

2.名词解释

有效位:一个二进制数从左往右第一个为1的位及其之后所有位叫有效位,其余称无效位,如:0 000 1 0001
floor:向下取整,即[X,X+1)区间中的所有数都取X;

3.编码原理

我们都知道,int变量通常占4个字节(byte),每个字节8位(bit),共占32位,在计算机中以二进制存储。如果能剔除所有二进制数无效位,再将剩下有效位 紧密排列写进二进制文件里,就可以大大减少空间占用。这就是原理,很简单。

举个栗子:
剔除前:(17,11)10=(0000 0000 000 1 0001 ,0000 0000 0000 1011)2---->剔除后 (1 0001,1011)2

我们看到17的有效位个数为 5,无效位个数为27。11的有效位个数是 4,无效位个数是28。
然后对17和9剔除无效位,剔除后共占9位,剔除前,两个二进制数占了64位。

但是又考虑到解码时必须指明被编码了的有效位个数,不然解码器不知道应该读到哪一位为止。还要进行进一步处理,即在二进制数的 有效位 前 放置 [有效位个数-1] 个0,此时编码完成。
接着上面的例子,在17前加 4个0,在11前加 3个0。

(1 0001,1011)2---->编码结果:(0 000 1 0001, 000 1011 )2

最终,只用16位对原64位的两个数完成了编码。

4.解码原理

为什么加的0要比有效位个数少 1

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值