二进制编码

字节(byte)、二进制、字节流、字符流相关概念分析

耗尽温柔 提交于 2019-11-28 19:13:37
https://blog.csdn.net/changwilling/article/details/52065955 1.字节: 字(Byte)节是长度单位。位(bit)也是长度单位。 因为计算机通信和存储的时候都是以010101这样的二进制数据为基础的,这儿的一个0和1占的地方就叫bit(位),即一个二进制位。 1Byte=8bit 1KB=1024B 1MB=1024KB(2的十次方) 2.二进制 二进制数有两个特点:它由两个基本字符0,1组成,二进制数运算规律是逢二进一。 为区别于其它进制数,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。 例如:二进制数10110011可以写成(10110011)2,或写成10110011B,对于十进制数可以不加注.计算机中的数据均采用二进制数表示,这是因为二进制数具有以下特点: 1) 二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。例如,电路中有,无电流,有电流用1表示,无电流用0表示。类似的还比如电路中电压的高,低, 晶体管的导通和截止等。 2) 二进制数运算简单,大大简化了计算中运算部件的结构。 二进制数的加法和乘法运算如下: 0+0=0 0+1=1+0=1 1+1=10 0×0=0 0×1=1×0=0 1×1=1 由于二进制数在使用中位数太长,不容易记忆,所以又提出了十六进制数. 3.字节流和字符流

【剑指Offer】二进制中1的个数

时光毁灭记忆、已成空白 提交于 2019-11-28 16:32:43
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 A1:判断数num的最右边一位是不是1,每次右移1位,直到数num变为0 ====> 要区分正数情况和负数情况,正数右移补0,负数右移补1 A2:避免死循环,不选择右移数num,而是左移flag  ====> 循环次数比较大,32位整数需要循环32次 A3:把数num减去1,再和原整数做位与运算。一个整数的二进制中有多少个1就可以进行多少次这样的运算 //数num右移,正数补0,负数补1 (1)Q1:可不可以把右移一位改成除以2?    A1:不可以,除法的效率比移位要低很多,实际编程中应尽可能用移位运算符代替乘除法 (2)A2:把负数0x80000000右移1位是0xC0000000 //左移flag class Solution { public: int NumberOf1(int n) { int count = 0; unsigned int flag = 1; while(flag) { if(n & flag) { count++; } flag = flag << 1; } return count; } };    //有几个1就运算几次(减+位与) class Solution { public: int NumberOf1(int n) { int count = 0; while(n)

定点数与浮点数区别

与世无争的帅哥 提交于 2019-11-28 16:01:42
最近做HDR时,经常要用NV提供的16位纹理,它的说明书16位能达到24位的精度,就很奇怪?一直搞不懂浮点数的精度怎么算的? 今天认真看了一下IEEE float point的标准,终于明白是什么了 1. 什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数(Fixed Point Number)。在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式,比如 99.00 或者 00.99 可以用于表达具有四位精度(Precision),小数点后有两位的货币值。由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。SQL 中的 NUMBER 数据类型就是利用定点数来定义的。还有一种提议的表达方式为有理数表达方式,即用两个整数的比值来表达实数。 定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如 123.45 用十进制科学计数法可以表达为 1.2345 × 102 ,其中 1.2345 为尾数,10

ASCII,Unicode和UTF-8

时间秒杀一切 提交于 2019-11-28 15:56:40
1.ASCII 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。 ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。 2.非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é

python 文件操作

蓝咒 提交于 2019-11-28 15:34:34
文件常用IO操作 open 打开 read 读取 write 写入 close 关闭 readline 行读取 readlines 多行读取 seek 文件指针操作 tell 指针位置 打开操作 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 打开一个文件,返回一个文件对象(流对象)和文件描述符。开发文件失败,则返回异常 基本使用:创建一个文件,然后打开它,用完关闭 f = open("data.txt") print(f.read()) f.close() 文件操作中,最常用的操作就是读和写。文件访问的模式有两种:文本模式和二进制模式,不同模式下,操作函数不尽相同,表现的结果也不一样。 open的参数 file 打开或者要创建的文件名,如果不指定路径,默认是当前路径 mode模式 描述字符 意义 r 缺省的,表示只读打开 w 只写打开 x 创建并写入一个新文件 a 写入打开,如果文件存在,则追加 b 二进制模式 t 缺省的,文本模式 + 读写打开一个文件,给原来只读,只写方式打开提供缺失的读或者写能力 # r模式 f = open('test') # 只读还是只写? f.read() f.write('abc')

前端对base64编码的理解,原生js实现字符base64编码

烈酒焚心 提交于 2019-11-28 15:24:31
目录 常见对base64的认知(不完全正确) 多问一个为什么,base64到底是个啥? 按照我们的思路实现一下 到这里基本就实现了,结果跟原生的方法打印的是一样的 下一次 @( 对于前端工程师来说base64图片编码到底是个什么玩意?) **** ---- 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有以下几点* base64是一种图片编码方式,用一长串超长的字符串表示图片 在加载的时候会直接以字符串的形式加载出来,减少了图片加载的http请求 正常加载服务器静态资源的时候都应该是通过http请求回来,每加载一张图片时需要发起一次http请求 ,http请求建立需要一定的时间,所以对于小图而且出现频次比较高的话,这样的成本消耗其实是特别浪费的 所以一般base64编码适用于小图片,出现频次比较高的情况 当然base64编码也有一定的缺点 会增加图片本上的大小,对于小图来说,转码增加的大小和http请求发起的浪费时间相比还是划算的,但是对于大图和出现次数比较少的情况,这种方法就有待商榷 当然上面我现在项目这种问题就很不合适,肯定需要寻求一个好的方式来解决掉这个问题 多问一个为什么,base64到底是个啥? base64是一种编码方式,将二进制编码为64字符串组成的字符码 标准的Base64并不适合直接放在URL里传输

编码原理详解(六)--CABAC

放肆的年华 提交于 2019-11-28 14:01:45
本篇介绍一下熵编码的另外一种方式CABAC,基于上下文的自适应二进制编码,其同样是对经过ZigZag扫描后的数据从概率的角度进行再编码,但是由于CABAC编码过程中涉及到诸多的概率模型以及其他算法,由于篇幅原因,本篇只做提及,不详细展开,本篇希望从梗概的角度让大家明白CABAC是怎样的一个过程。 一、简介 CABAC编码的目的是从概率的角度再做一次压缩,编码的过程主要分为二值化,上下文建模,二进制算术编码。 二、二值化 在图像处理的世界中,所谓二值化就是将像素点的值根据一定的算法,将像素分别修改为0,或255,即获取图像的灰度图,或者通俗些讲就是图像的黑白图。而此处的“二值化”可以暂且理解为,将数值二进制化的一个过程,当然不是简单的将十进制转换为二进制。CABAC中二值化的方式主要有“一元码”,“截断一元码”,“K阶指数哥伦布编码”,“定长编码”,详细的就不展开了,不过小编决定了后续专门搞篇说这个的,嫑着急。这里简单以“一元码”简单举例说明下: “一元码”的编码方式是,对于一个非二进制的无符号整数x >= 0,在CABAC中的一元码码字用x个“1”位外再加一个“0”组成。For example, 对“8”编码,则二值化后的结果为“111111110”。辣么,如果是6呢,你可以尝试一下的哦。 经过二值化之后,CABAC就已经把待编码的语法元素按照一定的规则转换为只用“0”和“1

HTTP/2 新特性总结

流过昼夜 提交于 2019-11-28 03:34:42
我在想了解HTTP/2的时候,查阅了很多资料,发现这篇很好,是外国的文章.我翻译过来,加入自己的一点理解. HTTP/2 更简单,高效,强大.它在传输层解决了以前我们HTTP1.x中一直存在的问题.使用它可以优化我们的应用.HTTP/2 的首要目标是通过完全的请求,响应多路复用,头部的压缩头部域来减小头部的体积,添加了请求优先级,服务端推送.为了支持这些特性,他需要大量的协议增加头部字段来支持,例如新的流量控制,差错处理,升级机制.而这些是每个web开发者都应该在他们的应用中用到的. HTTP/2并没有在应用中改变HTTP的语义,而是通过在客户端和服务端传输的数据格式(frame)和传输.它通过在新的二进制帧层控制整个过程以及隐藏复杂性,而这不需要改变原来有的东西就可以实现. 1. 设计和技术目标 HTTP是因特网广泛普及和采纳的应用层协议.它的易于实现性同样有了对应用性能方面的影响.HTTP/1.x 需要开启多个连接来实现并发和减少潜在影响.HTTP/1.x 的头部没有压缩,造成不必要的网络拥塞.HTTP/1.x没有应用资源优先级,导致重要Tcp连接的糟糕使用. 它的好处如下; HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by

重学计算机组成原理(十)- \"烫烫烫\"乱码的由来

 ̄綄美尐妖づ 提交于 2019-11-27 18:57:27
程序 = 算法 + 数据结构 对应到计算机的组成原理(硬件层面) 算法 --- 各种计算机指令 数据结构 --- 二进制数据 计算机用0/1组成的二进制,来表示所有信息 程序指令用到的机器码,是使用二进制表示的 存储在内存里面的字符串、整数、浮点数也都是用二进制表示的 万物在计算机里都是0和1,搞清楚各种数据在二进制层面是怎么表示的,是我们的必修课。 在实际应用中最常遇到的问题,也就是文本字符串是怎么表示成二进制的,特别是我们会遇到的乱码究竟是怎么回事儿 在开发的时候,所说的Unicode和UTF-8之间有什么关系。 理解了这些,相信以后遇到任何乱码问题,你都能手到擒来了。 1 理解二进制的“逢二进一” 二进制和我们平时用的十进制,并没有本质区别,只是平时是“逢十进一”,这里变成了“逢二进一” 每一位,相比于十进制下的0~9这十个数字,我们只能用0和1这两个数字。 任何一个十进制的整数,都能通过二进制表示出来 把一个二进制数,对应到十进制,非常简单,就是把从右到左的第N位,乘上一个2的N次方,然后加起来,就变成了一个十进制数 当然,既然二进制是一个面向程序员的“语言”,这个从右到左的位置,自然是从0开始的。 比如_0011_这个二进制数,对应的十进制表示,就是 \(0×2^3+0×2^2+1×2^1+1×2^0\) \(=3\) 代表十进制的3 对应地,如果我们想要把一个十进制的数

CRC校验学习

随声附和 提交于 2019-11-27 13:06:11
上面文字是来自一个 版本的介绍crc校验方式的介绍, 下面截图是一个视频crc校验原理的讲解。 通过这两部分才彻底弄清楚了crc是怎么计算的。 上部分来自 https://blog.csdn.net/weicao1990/article/details/51669853 视频来自 https://v.qq.com/x/page/l0812ydj8i2.html 1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“ 模2除法 ”)。到达接收端后,再把接收到的新帧除以(同样采用“ 模2除法 ”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1