zigzag 是一个简单好用的小整数压缩算法。

原理

现在一般的计算机都是 32 位或者 64 位机了,每个数据的表示长度和范围都比较多。一个常见的数据类型 int 一般占 4 个字节,但是在实际使用时,数字并不会很大,经常不会超过几万(当然要看实际情况),比如下面几个例子

number: 23
bit:    0000 0000 0000 0000 0000 0000 0001 0111
number: -33
bit:    1111 1111 1111 1111 1111 1111 1101 1111

通过观察可以发现,小正数的左侧有大量的 0,小负数的左侧有大量的 1。zigzag 做的就是将左边的冗余数据全部换为 0,便于后续压缩

正数

拿 23 举例

  1. 将数字左移一位:0000 0000 0000 0000 0000 0000 0010 1110
  2. 符号位加到最后一位(正数符号位为 0 不用操作)

得到了最后的压缩结果:0000 0000 0000 0000 0000 0000 0010 1110

负数

拿 -33 举例

  1. 左移一位:1111 1111 1111 1111 1111 1111 1011 1110
  2. 符号位加到最后一位:1111 1111 1111 1111 1111 1111 1011 1111
  3. 除最后一位全部取反:0000 0000 0000 0000 0000 0000 0100 0001

得到了最后的压缩结果:0000 0000 0000 0000 0000 0000 0100 0001

解码

Z i g z a g − 1 ( n ) Zigzag^{-1}(n) Zigzag−1(n) = (n << 1) ^ -(n & 1)

实现

uint32_t EncodeInt(int32_t number) {return number < 0 ? (((uint32_t)(-number)) * 2 - 1) : number * 2;
}int32_t DecodeInt(uint32_t number) {return (number >> 1) ^ -(number & 1);
}

下图是测试数字 -23 的结果:

Zigzag 压缩小整数相关推荐

  1. Zigzag小整数压缩算法

    Zigzag小整数压缩算法 Zigzag压缩算法 算法思路 代码实现 整数转Zigzag数据 ZIgzag数据转整数 Zigzag压缩算法 日常用到的整数通常为小整数,在二进制存储中包含大量的高位0, ...

  2. python求5_python(五)——运算符,小整数对象池

    1.成员运算符,判断某个东西是否在某个东西里包含:in,not in name = "abcd" if "ac" inname:print("ok&q ...

  3. python整数池_【Python】Python中神奇的小整数对象池和大整数对象池

    小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立 ...

  4. php源代码压缩,PHP_PHP 源代码压缩小工具,使用方法:(在命令行运行) 复 - phpStudy...

    PHP 源代码压缩小工具 使用方法:(在命令行运行) 复制代码 代码如下: php compactor.php DESTINATION.php SOURCE.php 下载: compactor.php ...

  5. python小整数池与大整数池

    在python中定义变量会有:id,type,value.对于==比较的是value,对于is比较的是id. 因此,对于相同value的变量,它的type相同,但是它的id值可能不一样.对于相同id的 ...

  6. 巧用TreeSet求解第k小整数(洛谷P1138题题解,Java语言描述)

    题目要求 P1138题目链接 分析 第K小整数应该是比较经典的问题啦,但我们也可以利用现成的数据结构去完成轻松处理. 既然还要去重,那不妨--嘿嘿嘿--TreeSet万岁!! 把元素全打进去就完成了去 ...

  7. Python的小整数对象池

    1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 257) 这些整数对象是提 ...

  8. HDU2561 第二小整数【水题+序列处理】

    第二小整数 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. 路径压缩_实战|python GUI压缩小程序

    说到Python,我们常常想到的就是一个小窗口,黑黢黢的cmd窗口运行一下代码. 就像下图: 那Python可不可以做出来具有界面的程序呢?就像这样: 答案是可以的,那我们就要说一下Python GU ...

最新文章

  1. 域名怎么设置非80端口_深信服网关怎么设置端口映射
  2. 人工智能与健康社会系列调研(一):人脸识别与公共卫生
  3. Android传感器编程带实例
  4. python虚拟环境搭建mac_mac搭建python virtualenv虚拟环境并使用 - 李金龙
  5. 【模式识别】Fisher线性判别实验报告之MATLAB仿真
  6. mseq matlab,Matlab生成M序列
  7. win7下装linux虚拟机,win7怎么在虚拟机安装linux系统|win7搭建linux虚拟机的方法
  8. PlaySound error
  9. android des 加密
  10. 阿里巴巴的合伙人制度!
  11. 运行 vue-typescript-admin-template 报错 error Command failed with signal “SIGABRT“. 切换node版本
  12. CRM客户信息管理系统
  13. java 订单减库存_下单减库存
  14. 腾讯收购Foxmail的意图
  15. 新型勒索软件Phobos利用弱安全性***目标
  16. Cg学习记录002 之Uniform参数
  17. 时间轮(TimeWheel)的设计与实现
  18. 斯泰因梅茨-电路向量法的创始人
  19. create sequence 序列号
  20. A Transformer-based System for English Named Entity Recognition 基于Transformer的英语命名实体识别系统

热门文章

  1. 输入关键字生成对联_对联生成器
  2. 讲人话科普,Python是个啥?为啥大家都在学?
  3. 计算机网络——物理层和信道复用(频分、时分、码分)技术
  4. JavaScript的NaN为什么不等于NaN
  5. 什么软件可以将win窗口进行置顶_电脑极简指南,这5个方法可以帮你节约生命...
  6. 国家自然科学基金 结题项目 查询网站
  7. flowable实战(二)flowable流程模型管理接口
  8. 2019年环175五一作业
  9. NGINX-SESSION粘滞
  10. ~scanf()简析