为什么8位符号数表示 -128~127以及变长编码
在这里不得说两样东西。数制和码制。正数和负数的数制,码制的差异导致。导致了他们表达方式的不同。但是,这样做是为了达到在二进制之间的运算直接实现正负数的直接的运算。原码,反码,补码。之间的规则我就不用说了,我想大家都知道。
下面来说一下在补码的表达形式中,各位的意义:
-2N-1 2N-2 ~~~ 23 22 21 20
最高位为符号位取的是负数,之后的其他位为正数
现在我们来举一个例子,来验证这个补码的规则:
(-5)原码=【1000 0101】=-1(4+1)=-5
(-5)反码=【1111 1010】
(-5)补码=【1111 1011】=-128+64+32+16+8+0+2+1=-5
在这里补码的最高符号位就是建立补码机制的关键。
变长编码(哈夫曼编码):这个也许会让你想到树结构。这个跨度很大。
这一下马上跳到数据结构里面真的有点让人受不了对吧。
对于变长编码,这个神奇的东西,用到了香农(shannon)爷爷提出的公式,世界上总有那么神奇的人,能发现那么神奇的东西。
接下来的哈夫曼在信息论中提出的编码,最终才实现了变长编码。这两个大神。
(变长编码针对的不是小型数据,而是针对数据庞大的的数据而采用的,而且数据越庞大,采用变长编码的压缩率就越高。)
对于我在此间看到的很多代码,很多概念,都是吃力。在这里就算是。要学的始终是很多
哈夫曼编码中出现了一个树的概念,这个概念很形象,一个由数据组成的树。
为了能使得编码和解码的能够顺利进行,毋庸置疑,他们的规则是一样的。就像接口协议一样,假如编码解码的规则不一样一切都将会乱套。
最让人疑惑之一的就是规则就是这个规则从何而来?
之前我提到过shannon公式,这个就是关键。
真不明白我是怎么想的,转了半天最后还是回到最初的问题,这个就是这压缩一切的开始,也是一切的核心。