首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

protobuffer前世今生(二)——编码

请继续读下去… base 128 Varints 为了简单理解pb编码,你首先要理解varints。varints 是一个使用一个或多个字节来序列化整数方法。小数字则使用字节少。...再次结合上面分析可以得到这个表格 ? 更多值类型 符号整数 刚刚我们看到,wire type 为0 都作为varints进行编码。...如果使用int32 and int64类型进行编码负数的话,varint结果往往是10个字节那么长——被当做一个非常大符号整数来对待。...如果使用符号类型的话,结果会使用ZigZag进行编码,这个有效多。 ZigZag 编码存在一个符号整数到无符号整数映射。因此,绝对值小数(-1) 也会有一个比较小varint编码值。...注意,在右移31位这部分,这个移动结果要么是一个全0数字(如果n是正数),要么是一个全是1bits(如果n是负数) 当解析sint32 或 sint64 这类数值时,就会解码回符号版本,-

52630

【C语言】char 关键字

符号(signed)char取值范围是『 (负)128 ~ 127』无符号字符unsigned char取值范围是『0~255』 ⒉作用 ⇨ 定义一个字符型变量方法是使用关键字 char,例如...: char str = 'A'; ⒊注意 ⇨ 字符数据在内存存储是字符 ASCll 码,即使是一个无符号整数,其形式与整数存储形式一样,因为在C语言字符型数据与整形数据之间通用。...因此,存储字母A当中实际上存储整数65值。当然,小写A在ASCll码当中整数97代表小写字母a。 拓展层面✔数据类型char是整数类型。...同时也是一种特殊类型字符,这是因为:可以用单引号表示字符常量→'A'、'8',单引号' '也是一个字符。 注✔ 在数据类型char当中字符'1'和阿拉伯数字①是不一样。...说明⇢当 char 表示为负数也就是符号时候如下 表示数字2七次方 2^7=128个 ,从 -127~-(负)0 其中-(负)0原码是→1 000 0000  补码是→1 0000 0000

62210
您找到你想要的搜索结果了吗?
是的
没有找到

粉丝问答一|关于计算机补码和结构体两个问题

今天分享下粉丝针对嵌入式软件开发面试知识点总结内容提出两个问题。问题不难,但是容易掉坑里。 而在笔试,很多大厂都喜欢出这种题目来坑害小伙伴们。...原问题为:不用除法操作符如何实现两个正整数除法。 粉丝疑问在于表达式-n=~ (n-1)=~ n+1 。解决这个问题核心在于,要知道计算机是如何存储数值。...在计算机系统,数值一律用补码来表示(存储)。主要原因是使用补码可以将符号位和其他位统一处理;同时,减法也可以按加法来处理。另外,两个用补码表示数相加时,如果最高位(符号位)进位,则进位被舍弃。...去掉整数n二进制中最后一个1:n&(n-1),n=010100,n-1=010011,n&(n-1)=010000。 问题二 结构体所占字节数 该问题来源于嵌入式软件开发面试知识点总结P150。...对于32位系统:4+4+2+1+(1)+10+(2)=24 对于64位系统:8+8+2+1+(1)+10+(2)=32 括号数字,表示是为了保证4字节对齐需要填充字节数。

29610

pythonencode和decode

pythonencode和decode误读总结     最近在学Python,对编码个误解地方     下面是错误理解:     encode():编码,将对象编码转换为指定编码格式,按照字面理解...python是个容易出现编码问题语言。所以,我按照我理解写下下面这些文字。      首先,要了解几个概念。     *字节:计算机数据表示。8位二进制。可以表示无符号整数:0-255。...下文,用“字节流”表示“字节”组成串。      *字符:英文字符“abc”,或者中文字符“你我他”。字符本身不知道如何在计算机中保存。...unicode:unicode定义了,一个“字符”和一个“数字对应,但是并没有规定这个“数字”在计算机怎么保存。(就像在C,一个整数既 可以是int,也可以是short。...它使用unicode定义“字符”“数字”映射,进而规定了,如何在计算机中保存这个数字。其它utf16等都是unicode实现。

2.8K20

MongoDB

MongoDB MongoDB相关概念 业务应用场景 传统关系型数据库(MySQL),在数据操作“三”需求以及应对Web2.0网站需求面前,显得力不从心 解释:“三”需求: High performance...BSON和JSON一样,支持 内嵌文档对象和数组对象,但是BSONJSON没有的一些数据类型,Date和BinData类型。...shell会使用一个特殊内嵌文档来显示64位整数 shell是不支持该类型,shell默认会转换成64位浮点数 64位浮点数 shell数字就是这一种类型 {“x”:3.14159,“y”:3...} null 表示空值或者未定义对象 {“x”:null} undefined 文档也可以使用未定义类型 {“x”:undefined} 符号 shell不支持,shell会将数据库符号类型数据自动转换成字符串...对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符 号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)} MongoDB特点

19010

正数、负数和补码_正数原码反码补码

以C语言符号数为例: int a = 0x80000000; int型总共占4字节,因此内存a变量应该是下面这样子: 1000 0000 0000 0000 0000 0000 0000 0000...这串二进制数字如果直接按照数学规则转成十进制的话,应该是 2147483648,但是根据之前定义我们知道,符号最高字节应该是符号位,所以对于计算机而言,这个二进制数是一个负数,所以上面这个二进制串其实是一个负数补码形式...,这是因为补码计算符号位是可以参加计算,我们始终以结果最高位作为符号位,不过在C语言环境,如果直接用0x80000000 – 1,其实是会把溢出符号位舍弃掉(因为我们要把结果存入一个int型字节变量里...了解了正、负数在计算机内存存放方式以及整数反转,那么如何在不改变数据类型前提下正确存放一个十进制大正数到内存里呢?...发现本站涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.7K50

串口调试工具--UartAssit

指令嵌入脚本代码必须使用模式符\[]。具体嵌入方式两种:运算表达式和BLOCK代码块(参考第4及第5小节)。 3. 脚本运算符 自动应答规则引擎,支持各种逻辑运算及位操作符。...功能描述:从指定位置(当前指令帧offset偏移地址处,或者模板字段注解名对应指令数据段)拷贝2个字节符号整数。...(24)getint - 从当前指令数据复制4字节符号整数 函数原型: short getint(offset|#comment, isBigEndian); 函数别名:getS32 入口参数:...功能描述:从指定位置(当前指令帧offset偏移地址,或者模板字段注解名对应指令数据段处)拷贝4字节符号整数。...功能描述:从指定位置(当前指令帧offset偏移地址,或者模板字段注解名对应指令数据段处)拷贝4字节符号整数

5.6K10

MongoDB 相关概念

BSON和JSON一样,支持内嵌文档对象和数组对象,但是BSONJSON没有的一些数据类型,Date和BinData类型。...JavaScript仅支持64位浮点数,所以32位整数会被自动转换。 shell是不支持该类型,shell默认会转换成64位浮点数 64位整数 不支持这个类型。...shell会使用一个特殊内嵌文档来显示64位整数 shell是不支持该类型,shell默认会转换成64位浮点数 64位浮点数 shell数字就是这一种类型 {"x":3.14159,"y":3...} null 表示空值或者未定义对象 {"x":null} undefined 文档也可以使用未定义类型 {"x":undefined} 符号 shell不支持,shell会将数据库符号类型数据自动转换成字符串...{ /* …… */ }} 二进制数据 二进制数据可以由任意字节串组成,不过shell无法使用 最大值/最小值 BSON包括一个特殊类型,表示可能最大值。

1.5K40

轻松拿捏C语言——【数据在内存存储】

一、整数在内存存储 整数2进制表示方法三种,即 原码、反码和补码 符号整数,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,最高位⼀位是被当做符号位,剩余都是数值位...对于整形来说:数据存放内存其实存放是补码 二、大小端字节序及判断 其实超过⼀个字节数据在内存存储时候,就有存储顺序问题,按照不同存储顺序,我们分 为大端字节序存储和小端字节序存储 大端(存储...小端(存储)模式: 是指数据低位字节内容保存在内存低地址处,而数据字节内容,保存在内存⾼地址处。 上述概念需要记住,方便分辨大小端。...例如:⼀个 16bit short 型 x ,在内存地址为 0x0010 , x 值为 0x1122 ,那么 0x11 为字节, 0x22 为低字节。...: 0.5 ⼆进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为1.0*2^(-1),其阶码为-1+127(中间值)=126,表⽰为01111110,而尾数1.0去掉整数部分为0,

7110

C语言:数据在内存存储形式

一、整数在内存存储 关于整数在内存存储形式,在博主之前写文章里已经介绍了!友友们可以去点下面链接去看,这里就不过多介绍。...截断之后,只会保留低位字节存储在c3!! 2.2 如何进行整体提升呢? 1. 符号整数提升是按照变量数据类型符号位来提升 2. ⽆符号整数提升,⾼位补0 2.3 如何进行截断呢?...,'11'到'44'个占用一个存储单元,那么它尾端很显然是44,前面的还是低就表示尾端放在高地址还是低地址,它在内存放法非常直观,如下图: 我们可以利用尾端和低尾端来记住大端小端概念,因为尾端数字对应就是低位字节...,如果尾端数字在较高地址处,就是尾端,就是大端,也就是低位字节被保存在高地址处。...符号整数提升是按照变量数据类型符号位来提升 2. ⽆符号整数提升,⾼位补0 5.3 大小端和强制类型转换关系 大小端(endianness)是指多字节数据在存储时字节顺序。

13010

【C语言进阶】——深入剖析数据在内存存储

数据类型详细介绍 整数类形 浮点型 构造类型 指针类型 空类型 2. 整形在内存存储 原码、反码、补码 整形存储补码原因 3. 大小端字节序介绍及判断 练习题(含笔试题) 4....首先,在C语言里我们把类型分为以下几种:1、整数类型 2、浮点型 3、构造类型(自定义类型) 4、指针类型 5、空类型 整数类形 //unsigned:无符号类型 signed:符号类型 char...%d:打印有符号整型,认为内存存放补码对应是一个符号数。...-128存储在内存补码为1000 0000(截断),打印无符号整数时,整型提升,char为符号数,高位补符号位,即11111111 11111111 11111111 10000000,由于是打印无符号整型...i是无符号整形,-1对应符号整数是一个很大正数,所以循环还会一直进行下去,陷入死循环! 相信到这里,应该对整形存储了较为清晰认识。接下来讲解以下浮点型是如何在内存存储4.

74130

【C语言】数据类型

WRITE IN FRONT 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TOP100...①字符(char)类型用于储存字符,像字母或标点符号。但是一点是新手初学者小伙伴很难意识到,当我们从技术层面看char实际上是整数类型。        ...②因为字符(char)类型实际上储存整数而不是字符。计算机使用数字编码来处理字符,即用特定整数表示特定字符。          例如~在ASCII码当中的话,整数数字65代表大写字母A。...如果你要知道它数据类型是长度是多少,方法很简单只需要计算2^比特位即可。 注意‍️在这里计算时候是要分 unsigned 无符号类型 和 signed 符号类型。...注意‍️Vs2022版本编译器是%zu格式字节         计算机单位bit 比特位,1bit 存放一个二进制位1或者0二进制数字

23420

数据在内存存储

对于符号整数最高位使符号位,仅仅代表正负,不代表大小意思。(但符号位依然会在计算时会参与)无符号就不存在符号位。...(适用于任何字节转换为字节) 所以在整数类型运算,都是转换为4字节数据再去算,这也能很好解释两个字符在运算前要转换为int类型再去算。...整数在内存存储练习题 大小端字节字节序判断(练习1) 基础知识点认知 对于内部字节为多个单个数据来说,大小端存储模式 那么为什么会存在大小端存储模式呢?...11111111,a和b都是符号,printf存储是以四个字节存储,所以整形提升为11111111111111111111111111111111,%d是打印有符号整数,其本身就是符号整数,无需任何变化....对于符号类型都有这个特殊规定 练习3 %d是打印出十进制符号整数

9610

二、Python介绍

、对不同系统平台间兼容性一定要求程序则通常使用解释性语言,Java、JavaScript、VBScript、Perl、Python等等。 ...区分中文编码方法是字节最高位不为0。按照程序员称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。..., 注:此处说是最少2个字节,可能更多 UTF-8,是对Unicode编码压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码内容用1个字节保存、欧洲字符用2...长整数 不过是大一些整数。 3.23和52.3E-4是浮点数例子。E标记表示10幂。在这里,52.3E-4表示52.3 * 10-4。...注:Python存在小数字池:-5 ~ 257 2、布尔值   真或假   1 或 0 3、字符串 字符串常用功能: 移除空白 分割 长度 索引 切片 4、列表 基本操作: 索引 切片 追加 删除 长度

82740

数据在内存存储(c语言)

整形在内存存储 原码、反码、补码 计算机整数三种2进制表示方法,即原码、反码和补码。...三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位 正数原、反、补码都相同。 负整数三种表示方法各不相同。...为什么大端和小端: 为什么会有大小端模式之分呢?这是因为在计算机系统,我们是以字节为单位,每个地址单元都对应着一个字节,一个字节为8 bit。...例如:一个16bit short 型 x ,在内存地址为 0x0010 , x 值为 0x1122 ,那么 0x11 为 字节, 0x22为低字节。...对于大端模式,就将 0x11 放在低地址,即 0x0010 , 0x22 放在 地址,即 0x0011。小端模式,刚好相反。

16210

java(3)——数据类型数值型整数类型

java数据类型两大类:基本数据类型和引用数据类型 基本数据类型分为数值型(数值型又分为整数类型(byte、short、int、long)和浮点类型(float、double))、字符型(char...)和布尔型(boolean) 引用数据类型分为类(class)、接口(interface)和数组 整数类型 名称 占用存储空间 byte 1字节 short 2字节 int 4字节 long 8字节...ps:一字节=8位 不同整数类型数表也不一样,byte类型数字范围是-128-127 代码实现: public class VarTest{ public static void main...可见定义不同数字可以用不同数值类型,但也要注意数表范围合理定义 ps:在定义long数值类型时,如果超过了int类型范围,要在末尾加上L 如何在程序里分别输出不同进制数字 默认情况下赋值时候默认为...10进制,不同进制前面要加上不同符号 进制 表示方法 2 前面加0b 8 前面加0 10 默认输出,不用加任何符号 16 前面加0x(X) 代码实现: public class VarTest{

67910

《深入理解计算机系统》阅读笔记--信息表示和处理(上)

,为什么会出现溢出,为什么会计算错误,如何在自己以后写代码过程避免一些潜在问题,让自己写出更高质量代码 我们学习一门开发语言时候,开始学习基础语法时候都会学习各种数据类型,这些数据类型在系统又是如何存储呢...上图是32位和64位典型值,整数或者符号,即可以表示负数,零和正数;无符号只能表示非负数 寻址和字节顺序 在大多数计算器上,对于多字节对象都被存储为连续字节序列,对象地址为所使用字节中最小地址...(右边补符号位) 现在几乎所有的编译器或者机器组合都对符号使用算术右移面对无符号数,右移必须是逻辑 整数表示 我们对整数主要分为:符号和无符号 先记一些术语: ?  ...符号和无符号之间转换 c语言允许在各种不同数字数据之间做强制类型转换 其实在c语言中,强制类型转换结果是保持位值不变,只是改变了解释这些位方式 -12345 16 位补码表示与53191...要将一个补码数字转换为一个更大数据类型,只需要在表示开头添加最高有效位值,这种运算称为符号扩展 可以通过下面的例子理解: 给出字长w= 3 到w = 4符号扩展结果位向量[101]表示值-4

73700

《深入理解计算机系统》阅读笔记--信息表示和处理(上)

,为什么会出现溢出,为什么会计算错误,如何在自己以后写代码过程避免一些潜在问题,让自己写出更高质量代码 我们学习一门开发语言时候,开始学习基础语法时候都会学习各种数据类型,这些数据类型在系统又是如何存储呢...上图是32位和64位典型值,整数或者符号,即可以表示负数,零和正数;无符号只能表示非负数 寻址和字节顺序 在大多数计算器上,对于多字节对象都被存储为连续字节序列,对象地址为所使用字节中最小地址...(右边补符号位) 现在几乎所有的编译器或者机器组合都对符号使用算术右移面对无符号数,右移必须是逻辑 整数表示 我们对整数主要分为:符号和无符号 先记一些术语: ?  ...符号和无符号之间转换 c语言允许在各种不同数字数据之间做强制类型转换 其实在c语言中,强制类型转换结果是保持位值不变,只是改变了解释这些位方式 -12345 16 位补码表示与53191...要将一个补码数字转换为一个更大数据类型,只需要在表示开头添加最高有效位值,这种运算称为符号扩展 可以通过下面的例子理解: 给出字长w= 3 到w = 4符号扩展结果位向量[101]表示值-4

93630

浮点数据类型在内存存储以及大小端介绍

✔什么是数据低位与高位?(也叫低字节字节) 以十进制为例:就是个位是最低位然后是十 百 千 万...依次由低到 ✔什么是内存低地址与高地址?...地址:在计算机运行时,数据会存放在内存,内存会以字节为单位划分为多个存储空间,并且为每个字节默认设置一个对应编号,这个编号就是地址 低地址与高地址:编号低就是低地址,编号就是高地址。...例如下图:  变量a是整型变量对应4字节其十六进制表示为也就是20十六进制为:0x00 00 00 14,我们看到14为低位(低字节),在放在地址Ox0021FA14而剩下00 00 003个字节依次存放在...首先,E为一个无符号整数(unsigned int) 这意味着,如果E为8位,它取值范围为0~255;如果E为11位,它 取值范围为0~2047。...以及浮点数据类型是如何在内存存储,介绍了科学计数表示浮点数(SME形式)。 希望大家多多关注哦~

17110

MySQL学习笔记

类型 大小 范围(符号) 范围(无符号) 用途 TINYINT 1 byte (-128,127) (0,255) 小整数值 SMALLINT 2 bytes (-32 768,32 767) (0,...LONGTEXT 0-4 294 967 295 bytes 极大文本数据 注意:char(n) 和 varchar(n) 括号 n 代表字符个数,并不代表字节个数,比如 CHAR(30)...三丶FLOAT 与 DOUBLE 差异 (单精度与双精度什么区别) 最本质区别:单精度,也就是 float ,在 32 位机器上用 4字节来存储;而双精度double是用 8 个字节来存储,...所占内存不同 精度浮点数bai占du用4字节(32位)存储空间来存储一个浮点数,包括符号位1位,阶码8位,尾数23位。...E表示10多少次方,3.4E38指是3.4乘以1038次方。

89320
领券