二进制编码

CRC码计算及校验原理的最通俗诠释

孤街醉人 提交于 2019-12-02 10:48:39
循环冗余校验检错方案 奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110

数值型数据的表示(2.0)

寵の児 提交于 2019-12-02 09:14:47
无符号数 计算机CPU中寄存器是用来存放数据的,通常称寄存器的位数为CPU的机器字长。所谓无符号数,就是没有符号的数(只能表示正数),在寄存器中的每一位均可用来存放数值,而与其相对的另一个概念——有符号数要复杂一些。因为有符号数还能表示负数,这就需要有一个数据位来表示数据的正负,所以无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。由于无符号数和有符号数的这一区别,在同一机器字长的条件下,无符号数与有符号数所能表示的数值范围也是不同的。例如,机器字长同为16位的情况下,无符号数的取值范围为0~65535,而有符号数如果采用补码表示法(关于补码下面会学到),取值范围则为:-32768~+32767. 有符号数 1.真值与机器数的概念 学习有符号数首先要理解两个专业术语:真值和机器数。 我们平时使用符号“-”来表示一个负数,例如-100,-32,使用“+”或省略“+”来表示一个正数,例如+65,130.这些例子中的实际值就是真值。真值往往是面向人的,可以用二进制数表示,也可以用其它数值表示,但根据习惯,常用十进制数表示。 而在计算机中,因为只能表示0和1两种数码,所以计算机中任何信息都是采用0和1的组合序列来表示。也就是说,对于有符号数来说,也只能用0或者1来表示“正”或“负”。一般情况下,都用0来表示“正”,用1来表示“负”

CRC多项式转换二进制

∥☆過路亽.° 提交于 2019-12-02 05:18:11
1.多项式与二进制的直接对应关系:   X的最高次幂对应二进制的最高位数;以下各位对应多项式的各幂次,有幂次对应1,无幂次对应0;X的最高次幂是R,转换对应的二进制数R+1位; 2.多项式的生成:   发送方的接收方的约定的一个二进制数;在传输过程中始终不变。在发送方,利用生成多项式对信息多项式做模2除生成校验码,在接收方,利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。   应满足:a、生成多项式的最高位和最低位必须为1。       b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。       c、不同位发生错误时,应该使余数不同。       d、对余数继续做模2除,应使余数循环 来源: https://www.cnblogs.com/zhangweigang/p/11731572.html

HTTP/2 新特性总结

和自甴很熟 提交于 2019-12-02 02:08:27
我在想了解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

面试必备:高频算法题终章「图文解析 + 范例代码」之 矩阵 二进制 + 位运算 + LRU 合集

ε祈祈猫儿з 提交于 2019-12-01 20:10:26
Attention 秋招接近尾声,我总结了 牛客 、 WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对、测试。欢迎食用 本文将覆盖 「二进制」 + 「位运算」 和 Lru 方面的面试算法题,文中我将给出: 面试中的题目 解题的思路 特定问题的技巧和注意事项 考察的知识点及其概念 详细的代码和 解析 开始之前,我们先看下会有哪些重点案例: 为了方便大家跟进学习,我在 GitHub 建立了一个仓库 仓库地址: 超级干货!精心归纳 视频、归类、总结 ,各位路过的老铁支持一下!给个 Star ! 现在就让我们开始吧! 矩阵 螺旋矩阵 给定一个包含 m x n 个要素的矩阵,( m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。 示例 : 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7] 解题思路 我们定义矩阵的第 k 层是到最近边界距离为 k 的所有顶点。例如,下图矩阵最外层元素都是 第 1 层 ,次外层元素都是 第 2 层 ,然后是 第 3 层 的。 [[1, 1, 1, 1, 1, 1, 1], [1, 2, 2, 2, 2, 2, 1], [1, 2, 3, 3, 3, 2, 1],

2.2.1 比特【译】

二次信任 提交于 2019-12-01 13:00:32
主存是计算机的一部分,程序和数据就存在那里。虽然术语“storage”越来越多地用来表示硬盘存储,一些计算机科学家(尤其是英国人)更偏向于使用单词store或者storage而不是memory来表示内存。没有了处理器读写信息所需的内存,世界上就没有存储程序的数字计算机了。 内存的基本单元是二进制数字,称作比特。一比特包含一个0或一个1。它是最简单的单元。(一个只存储数字0的设备很难形成一个基础的内存系统;至少需要两个值。) 人们常说计算机使用二进制算数的原因是因为它“效率高”。他们想表达的意思(虽然他们几乎没有意识到)是数字信息可以被离散地存储在一些连续的物理设备上,比如电压电流。被分离的信息越多,相邻值之间的间隔越小,内存也就越不可靠。二进制系统只被分成两个值。因此,这是编码二进制信息最有效的方法。如果你对二进制不熟悉,请看附录A。 一些计算机,比如大型IBM商用机,除了二进制之外也会采用十进制。有一个小技巧是,用4位存储一个十进制数字,使用BCD(Binary Coded Decimal)编码。4位能提供16种组合,0到9十位数字之外,还有六个组合没有用到。数字1944的十进制和纯二进制表示如下: 十进制中16位可以存储数字0到9999,给出10000种组合,尽管16位的纯二进制数能存储65536个组合。出于以上原因,人们认为二进制更有效率。 然而细想一下

Redis二进制安全概念

本小妞迷上赌 提交于 2019-12-01 12:57:47
  二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译等,如果被攻击,能够及时检测出来。   二进制安全包含了密码学的一些东西,比如加解密、签名等。   举个例子,你把数据11110000加密成10001000,然后传给我,就是一种二进制安全的做法。 redis中的二进制安全   C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含空字符,否则最先被程序读入的空字符将被误认为是字符串结尾,这些限制使得C字符串只能保存文本数据,而不能保存像图片、音频、视频、压缩文件这样的二进制数据。   举个例子,如果有一种使用空字符来分割多个单词的特殊数据格式,如图所示,那么这种格式就不能使用C字符串来保存,因为C字符串所用的函数只会识别出其中的"Redis",而忽略之后的"Cluster"。   虽然数据库一般用于保存文本数据,但使用数据库来保存二进制数据的场景也不少见,因此,为了确保Redis可以适用于各种不同的使用场景, SDS(simple dynamid string )的 API都是二进制安全的(binary-safe),所有SDS API都会以处理二进制的方式来处理SDS存放在buf数组里的数据 , 程序不会对其中的数据做任何限制、过滤、或者假设 ,数据在写入时是什么样的,它被读 取时就是什么样。  

HTTP/1.1与HTTP/2有什么区别?

↘锁芯ラ 提交于 2019-12-01 12:15:30
介绍 超文本传输​​协议(HTTP)是一种应用协议,自1989年发明以来,它一直是事实上在万维网上进行通信的标准。从1997年发布HTTP / 1.1到最近,对它的修改很少。协议。但是在2015年,重新构想的版本称为HTTP / 2投入使用,它提供了几种减少延迟的方法,尤其是在处理移动平台以及服务器密集型图形和视频时。此后HTTP / 2变得越来越流行,据估计,世界上约有三分之一的网站都支持HTTP / 2。在这种瞬息万变的格局中,Web开发人员可以从了解HTTP / 1.1和HTTP / 2之间的技术差异中受益,从而使他们可以就不断发展的最佳实践做出明智而有效的决策。 阅读本文之后,您将了解HTTP / 1.1和HTTP / 2之间的主要区别,重点介绍HTTP / 2为实现更有效的Web协议而采取的技术更改。 ### 背景 为了具体说明HTTP / 2对HTTP / 1.1所做的特定更改,让我们首先从较高的角度看一下它们的历史发展和基本工作。 #### HTTP / 1.1 HTTP由Timothy Berners-Lee于1989年开发,作为万维网的通信标准,HTTP是一种顶级应用程序协议,它在客户端计算机与本地或远程Web服务器之间交换信息。在此过程中,客户端通过调用类似或的方法向服务器发送基于文本的请求。作为响应,服务器将HTML页面之类的资源发送回客户端。GETPOST

CSP2019初赛知识点梳理

烈酒焚心 提交于 2019-12-01 08:40:39
知识点 小 汇总 Catalan数 公式1: \(f(n)=\sum_{i=0}^{n-1}f(i)\times f(n-1-i)\) ,其中 \(f(0)=1\) 如何去理解这个公式? 我们可以 感性地 把这个化为一个二叉树状态方案问题。 当n=1的时候显然方案数为1,即f(1)=1 当n=2的时候,有以下情况 左边sz 右边sz 总方案 1 0 \(f(1)\times f(0)=1\) 0 1 \(f(0)\times f(1)=1\) 所以f(2)=5 当n=3的时候,有以下情况 左边sz 右边sz 总方案 2 0 \(f(2)\times f(0)=5\) 1 1 \(f(1)\times f(1)=1\) 0 2 \(f(0)\times f(2)=5\) 所以f(3)=11 那么我们这样往下推,就得到了 左边sz 右边sz 总方案 n-1 0 \(f(n-1)\times f(0)\) n-2 1 \(f(n-2)\times f(1)\) n-3 2 \(f(n-3)\times f(2)\) …… …… …… 2 n-3 \(f(2)\times f(n-3)\) 1 n-2 \(f(1)\times f(n-2)\) 0 n-1 \(f(0)\times f(n-1)\) 故得到上述式子。 公式2: \(f(n)=\frac{1}{n+1}C^n_{2n}\)

Python基础 二进制和字符编码

你离开我真会死。 提交于 2019-12-01 08:16:14
二进制定义   二进制是计算技术中广泛采用的一种 数制 。 二进制数 据是用0和1两个 数码 来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师 莱布尼兹 发现。当前的 计算机系统 使用的基本上是 二进制系统 ,数据在 计算机 中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。 二进制与十进制转换   我们已经发现,二进制的第n位代表的十进制值都刚好遵循着2的n次方这个规律 字符编码   通过二进制的知识,大家已经知道计算机只认识二进制,生活中的数字要想让计算机理解就必须转换成二进制。十进制到二进制的转换只能解决计算机理解数字的问题,那么文字要怎么让计算机理解呢?   于是我们就选择了一种曲线救国的方式,既然数字可以转换成十进制,我们只要想办法把文字转换成数字,这样文字不就可以表示成二进制了么?   约定了一个表,把文字和数字对应上,这张表就相当于翻译,我们可以拿着一个数字来对比对应表找到相应的文字,反之亦然。 ASCII码   假如我们就已经有这么一张表了      ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于 拉丁字母 的一套电脑编码系统,主要用于显示现代 英语 和其他 西欧 语言