当前位置: 首页 > news >正文

varint编码实现原理

简言

1. varint即 variable int,也就是变长整型,在mysql,levelDB,protobuf中都有使用

2. varint编码的优点是对数值较小的数进行编码后占用字节较少,比如[0-127]只占用1个字节,[128~16383]只占用2个字节。而我们常用的int32,int64之类,无论数字多大,都固定占4字节,8字节

3. varint编码的缺点是对数值较大的数和负数进行编码后占用字节较多,最多可能要占10个字节(表示负数的时候)

4. 因为生活中真实用到的数字往往都不大且是正数,所以综合优点缺点varint还是能节省一些空间

编码原理

varint 对数字的二进制,从右往左,每7位分割成一块

如果不是最后一块,则左边补1,组成一个字节

如果是最后一块,则左边补0,组成1个字节

最终保存的时候,根据分割块的顺序依次从左往右

举例(为了方便大家看,从右往左,每7位一个颜色)

举例1:

数字5,二进制101,从右往左依次取7位

第一次取7位,由于只有3位,所以只分割出来1块,也就是最后一块,根据规则前面补0,得到00000101

所以,varint表示法是00000101

跟原来二进制一样,所以[0~255]之间的数字只占用1个字节

举例2:

数字130,二进制10000010,从右往左依次取7位

第一次取出来的0000010,因为前面还有数字1,自己不是最后一块,根据规则左边补1,得到 10000010

第二次取出来的1,因为前面已经没数字了,这里是最后一块了,根据规则前面补0,得到00000001

把这些分割后新组成的块,从左往右填

所以,varint表示法是10000010   00000001

举例3:

数字12345678,二进制101111000110000101001110,从右往左依次取7位

第一次取出来的1001110,因为自己不是最后一块,根据规则左边补1,得到11001110

第二次取出来的1000010,因为自己不是最后一块,根据规则左边补1,得到11000010

第三次取出来的1110001,因为自己不是最后一块,根据规则左边补1,得到11110001

第四次取出来的101,因为自己是最后一块,根据规则左边补0,得到00000101

把这些分割后新组成的块,从左往右填

所以,最终varint表示法是11001110  11000010  11110001   00000101

http://www.lryc.cn/news/112977.html

相关文章:

  • 如果新电脑是刚安装的mysql,但是旧电脑迁移过来的文件里面有相关的rails文件,运行rake db:migrate一直报错
  • ChatGPT已闯入学术界,Elsevier推出AI工具
  • 深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现
  • R语言3_安装SeurateData
  • 详解Gillespie算法:使用Python构建分子化学模拟及其在随机多智能体动力学中的应用
  • Unity数字可视化学校_昼夜(三)
  • 使用罗技鼠标后 弹出当前页面的脚本发生错误AppData/Local/Temp/LogiUI/Pak/js/jquery-1.3.2.min.js解决
  • Kubernetes(K8s)从入门到精通系列之十四:安装工具
  • 【Python】Python元组学习
  • HTML 元素的属性有哪些?
  • Spring之事务实现方式及原理
  • 为独立服务器增加安全性的简单步骤
  • JavaScript--Cookie
  • 【单片机】晨启科技,酷黑版,简易电压采集装置
  • 任务12、Quality指令加持,Midjourney生成电影级数码作品
  • 第4章 字符串和格式化输入/输出
  • 嵌入式开发学习(STC51-7-矩阵按键)
  • WMS仓储管理系统的价值从哪些方面体现
  • 网站推荐第二期-沉浸式网页翻译
  • 【独立后台】快递小程序便宜寄快递系统小程序 对接易达
  • 【JVM】垃圾回收 ——自问自答2
  • MySQL数据库数据类型
  • 【力扣】27. 移除元素 <快慢指针、首尾指针>
  • 【每日一题】—— C. Challenging Cliffs(Codeforces Round 726 (Div. 2))
  • 想在金融界拥有一席之地吗—社科院杜兰大学金融管理硕士助你圆梦
  • Moonbeam与Nodle网络集成,增添物联网功能
  • 关于docker 在ubuntu16.04 上的安装
  • Cmder启动加速
  • 【windows】windows上如何使用linux命令?
  • Docker Compose: 集合管理Docker的工具安装