编码:隐匿在计算机软硬件背后的语言(2)--二进制

1比特是可能存在的最小的信息量,任何小于1比特的内容根本算不上是信息。

信息是指多个可能性中的一种。

最常见的二进制数的表现形式也许就是无处不在的通用产品代码(UPC,Universal Product Code)。

有趣的是,UPC也是二进制码,虽然乍看起来不太像。下面看看UPC是怎样工作的,就会明白。

以下图所示的UPC为例。


我们试着这样解读,将UPC看作一系列比特位。将黑色条纹看作1,白色间隙看作0,;由于黑条纹的宽度和白间隙的宽度是成倍数的,宽条纹的宽度是窄条纹的二倍三倍,将最窄的条纹作为基元。将上图的一个断面取出如下所示。


实际上,计算机扫描时正式这样处理的,转换后本例中的条纹和比特位之间的关系可以如下表示。


整个UPC一共95位二进制数,起初的3个比特通常是1 0 1,这就是最左边的护线,它帮助计算机扫描仪定位。从护线中,扫描仪可以知道代表单个比特的条或间隙的宽度,所有包装上的UPC印刷大小都是一样的。

最左边的护线之后是6组比特串,每串7个比特位。每一组代表0-9中的一个数字。就下来是5个比特位的中间护线,通常是01010,它是一个内置的检错码,预防条形码被篡改或印错。中间护线后又是6组比特串,每组7个比特位,最右边是右侧护线,共3位,101。

对于中间护线左右两侧的6组比特串,可以用下面的图示方法进行编码。


 

左边的编码方式中,以0开头,以1结尾,而且采用奇校验,每组1的个数都是奇数个。右边的编码方式都是以1开头,以0结尾,而且是左边编码对应的反码,采用偶校验。利用上面两个编码表,我们解码后的数字是

0  51000  01251  7

这一串数字与条形码下面的数字一模一样,这并非巧合。

上面的这串数字的第一个数字被称为数字系统符。接下来5个表示制造商编码,后5位是该厂商的商品编码。最后一位数字按下图所示的方式计算。

用A-K表示这11个数字。


按下列方式组合计算


代入数据


然后用最接近这个结果的10 的整数倍(这里是30)减去这个数

也就是30-23=7,正好是最后一位数字。

这样UPC总共使用95个比特位来表示11位有效的十进制数,实际上UPC左右护线两侧还有空白位置。之所以加入这些冗余是为了安全,如果条形码虽已被改动就没有任何意义了。

当从右向左扫描时,编码方式反之即可。编码表如下所示,


  

条形码本质上使用二进制描述的,莫尔斯码也是如此。把莫尔斯码的点和划以及两者之间的空白看作二进制的0和1也会有类似的表述方式。

虽然一个比特位只能表示两种状态,但是二进制的比特可以做的事情太多了。0和1无处不在。


上一篇-->编码:隐匿在计算机软硬件背后的语言(1)--编码到二进制数字系统

下一篇-->编码:隐匿在计算机软硬件背后的语言(3)--二进制加法器


原文地址:https://www.cnblogs.com/hitfredrick/p/6403013.html