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
相关文章:
varint编码实现原理
简言 1. varint即 variable int,也就是变长整型,在mysql,levelDB,protobuf中都有使用 2. varint编码的优点是对数值较小的数进行编码后占用字节较少,比如[0-127]只占用1个字节,[128~16383]只占用2个字节。…...
如果新电脑是刚安装的mysql,但是旧电脑迁移过来的文件里面有相关的rails文件,运行rake db:migrate一直报错
$ bundle exec rake db:migrate#运行完命令报错 rake aborted! LoadError: libmysqlclient.so.21: cannot open shared object file: No such file or directory - /home/meiyi/.asdf/installs/ruby/2.6.9/lib/ruby/gems/2.6.0/gems/mysql2-0.5.5/lib/mysql2/mysql2.so /home/m…...
ChatGPT已闯入学术界,Elsevier推出AI工具
2022年11月,OpenAI公司发布了ChatGPT,这是迄今为止人工智能在现实世界中最重要的应用之一。 当前,互联网搜索引擎中出现了越来越多的人工智能(AI)聊天机器人,例如谷歌的Bard和微软的Bing,看起来…...
深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现
深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现 RepViT: Revisiting Mobile CNN From ViT Perspective PDF: https://arxiv.org/pdf/2307.09283.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://gith…...
R语言3_安装SeurateData
环境Ubuntu22/20, R4.1 在命令行中键入, apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev # libcairo2-dev :: systemfonts # libgtk :: textshaping进入r语言交互环境,键入, instal…...
详解Gillespie算法:使用Python构建分子化学模拟及其在随机多智能体动力学中的应用
第一部分:Gillespie算法简介 Gillespie算法是一种利用蒙特卡洛抽样模拟化学体系随机动力学行为的方法[3]。它是由Joseph L. Doob提出的,用于生成具有已知反应速率的随机方程组的统计上正确的轨迹(可能的解)[5]。在本文中,我们将详细介绍Gillespie算法的原理,并使用Pytho…...
Unity数字可视化学校_昼夜(三)
1、删除不需要的 UI using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class EnvControl : MonoBehaviour {//UIprivate Button btnTime;private Text txtTime; //材质public List<Material> matListnew Li…...
使用罗技鼠标后 弹出当前页面的脚本发生错误AppData/Local/Temp/LogiUI/Pak/js/jquery-1.3.2.min.js解决
使用的台式机,没有蓝牙驱动,在用logi无线鼠标时,把鼠标连接插入台式机后弹出的如上图所示这个提示,无论是点是/否,还是X掉上图提示,电脑右下角的图依然存在。不习惯这丫的存在。 我重启还是有,然…...
Kubernetes(K8s)从入门到精通系列之十四:安装工具
Kubernetes K8s从入门到精通系列之十四:安装工具 一、kubectl二、kind三、minikube四、kubeadm 一、kubectl Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。 …...
【Python】Python元组学习
Python之元组学习记录 一、元组的特点 可以容纳多个数据可以容纳不同类型的数据(混装)数据是有序存储的(下标索引)允许重复数据存在不可以修改(增加或删除元素等)但内部list元素可以被修改支持while&…...
HTML 元素的属性有哪些?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ class⭐ id⭐ style⭐ src⭐ href⭐ alt⭐ width和height⭐ disabled⭐ value⭐ required⭐ placeholder⭐ checked⭐ selected⭐ target⭐ colspan和rowspan⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得…...
Spring之事务实现方式及原理
目录 Spring事务简介 Spring支持事务管理的两种方式 编程式事务控制 声明式事务管理 Spring事务角色 未开启事务之前 开启Spring的事务管理后 事务配置 事务传播行为 事务传播行为的可选值 Spring事务简介 事务作用:在数据层保障一系列的数据库操作同成功…...
为独立服务器增加安全性的简单步骤
为独立服务器增加安全性的简单步骤 马上注册成为ROSABC会员,随时发帖回复。 您需要 登录 才可以下载或查看,没有账号?会员注册 x 独立服务器是您业务的中心,它需要尽可能的安全。对企业中心的攻击可能会导致您失去知识产权&…...
JavaScript--Cookie
什么是 Cookie? 在JavaScript中,cookie是一种小型的文本文件,它存储在用户的计算机上。通过使用cookie,网站可以向用户的浏览器发送数据,并将该数据保留在浏览器中,使网站能够在不同页面之间传递数据或存储…...
【单片机】晨启科技,酷黑版,简易电压采集装置
简易电压采集装置(限MSP430、STM32单片机) 任务要求: 设计制作一个简易电压采集与显示装置,实现如下基本功能: 评分细则: 1.通过单片机内部ADC模块采集1路电压并通过OLED屏显示电压大小;&#x…...
任务12、Quality指令加持,Midjourney生成电影级数码作品
12.1 任务概述 本次实验任务旨在帮助你掌握Midjourney AI绘画中的Quality指令。通过深入介绍Quality指令的概念和作用,我们将解释为什么它在绘画中至关重要。通过测试不同的Quality参数对绘画效果的影响,并提供实战演示,你将学会如何在Midjourney中设置Quality参数以达到更…...
第4章 字符串和格式化输入/输出
本章介绍以下内容: 函数:strlen() 关键字:const 字符串 如何创建、存储字符串 如何使用strlen()函数获取字符串的长度 用C预处理器指令#define和ANSIC的const修饰符创建符号常量 本章重点介绍输入和输出。与程序交互和使用字符串可以编写个性…...
嵌入式开发学习(STC51-7-矩阵按键)
内容 按下S1-S16键,对应数码管最左边显示0-F 矩阵按键简介 独立按键与单片机连接时,每一个按键都需要单片机的一个I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的I/O口资源;而单片机 系统中I/O口资…...
WMS仓储管理系统的价值从哪些方面体现
仓库管理在不断改善,采用信息化来管理仓库。自从使用了WMS仓储管理系统解决方案后,仓库管理的效率大大提高了,而且WMS系统有很多价值。 首先,WMS系统可以帮助员工更省时省力地完成仓库管理工作,提高效率和准确性。传统…...
网站推荐第二期-沉浸式网页翻译
通过在浏览器上安装插件形式实现,接入多方翻译接口,实现全平台翻译功能,甚至可以使用openai的chatgpt,效率倍增。 不仅可以双语阅读网页,甚至pdf也支持翻译。 推荐网址如下: 双语网页翻译 - 电子书翻译 …...
OpCore-Simplify:智能配置黑苹果的高效工具
OpCore-Simplify:智能配置黑苹果的高效工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在黑苹果配置领域,OpCore-Simplify…...
HybridCLR的底层原理
HybridCLR(原名huatuo)是一个为Unity IL2CPP后端设计的原生C#热更新解决方案。它通过扩展Unity的IL2CPP运行时,将其从纯AOT(提前编译)模式改造为 “AOT 解释器”混合运行时,从而原生支持动态加载.NET程序集…...
开源工具Untrunc:视频文件恢复的技术实践指南
开源工具Untrunc:视频文件恢复的技术实践指南 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 在数字时代&#…...
解锁突破平台限制:res-downloader资源获取的创新解决方案
解锁突破平台限制:res-downloader资源获取的创新解决方案 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 当你在微…...
效率提升利器:用快马AI生成批量域名健康检查工具,告别手动刷新
效率提升利器:用快马AI生成批量域名健康检查工具,告别手动刷新 作为开发者或运维人员,我们经常需要监控一批服务域名的健康状态。比如最近公司新上线了一批jxx相关的域名,需要定期检查它们的可用性和响应速度。传统的手动刷新浏览…...
5分钟终极指南:在Windows上完美使用苹果触控板的完整方案
5分钟终极指南:在Windows上完美使用苹果触控板的完整方案 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad…...
如何进行 SEO 网站建设的链接优化
如何进行 SEO 网站建设的链接优化 在当今的数字化时代,搜索引擎优化(SEO)无疑是任何网站建设项目中不可或缺的一部分。尤其是在百度这样的主要搜索引擎上,SEO的重要性更是不言而喻。如何进行 SEO 网站建设的链接优化呢࿱…...
终极装备管理革命:TQVaultAE如何彻底改变《泰坦之旅》游戏体验
终极装备管理革命:TQVaultAE如何彻底改变《泰坦之旅》游戏体验 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE TQVaultAE是《泰坦之旅周年纪念版》的终极外部工具…...
3步攻克NCM加密壁垒:让音乐文件重获跨设备自由
3步攻克NCM加密壁垒:让音乐文件重获跨设备自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 当你从音乐平台下载的NCM格式文件无法在车载音响、MP3播放器等设备播放时,是否感到束手无策?ncmdump…...
如何快速搭建REST API测试环境:JSONPlaceholder与json-server的完整指南 [特殊字符]
如何快速搭建REST API测试环境:JSONPlaceholder与json-server的完整指南 🚀 【免费下载链接】jsonplaceholder A simple online fake REST API server 项目地址: https://gitcode.com/gh_mirrors/js/jsonplaceholder 在当今快速发展的Web开发领域…...
