信息中的 0 和 1

信息中的 0 和 1

信息时代早已到来,在诸多电子产品中,信息是怎么以“电”的形式存储和传播的呢?在计算机中所有的信息都是以二进制形式存储的,因为电路只有通和断两种情况,就是对应着的1和0,那么所有的信息都是如何存储的呢?

进制

进制也就是进位制,是人们规定的一种计数的进位方法。 对于任何一种进制--- X 进制,就表示某一位置上的数运算时是逢 X 进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推, x 进制就是逢 x 进位。生活中最常用的是十进制,而在计算机中则是以二进制的形式来存储数据的。所以进制间都可以相互转换,这也就是电信号存储数据的理论基础。

1. 二进制

二进制的进位规则是“逢二进一”,所以在二进制中,只有 0 和 1 两个数码,这就对应了电路“通”和“断”的逻辑关系,0 和 1 也可以用来描述许多只有两种对立逻辑关系的事物,比如:开关的“开”和“关”,事件的“真”和“假”,线路电压的“高电平”和“低电平”等等。

二进制转换成十进制:

1001_{(2)}=1\times2^3+0\times2^2+0\times2^1+1\times2^0=8+0+0+1=9_{(10)}

所有进制都可以用这种方式转换成十进制。

2. 十进制

十进制的进位规则是“逢十进一”,在十进制中,有 0 ~ 9 共十个数码,这是我们日常生活中普遍用的进制,数学里学的运算法则,定理公理都是以十进制为基础的运算。这里就不作过多的阐述。

十进制转换成二进制:

19\div2 = 9......1\\ 9\div2=4......1\\ 4\div2=2......0\\ 2\div2=1......0\\ 1\div2=0......1\\

结果由下向上取余数为: 10011 ,用这种方法可以将十进制转换成所有进制。

3. 十六进制

十六进制的进位规则是“逢十六进一”,在十六进制中,有 0 ~ 9 和 A, B, C, D,E, F共十六个数码,数据在计算机中的表示,最终都是以二进制的形式存在,但是二进制对数的表达长度太大,所以在编程中采用进制较高的十六进制,也因为十六进制与二进制之间的互相转换比较简单。

十六进制转换为十进制:

5AB_{(16)}=5\times16^2+A\times16^1+B\times16^0=1280+160+11=1451_{(10)}

十进制转换为十六进制:

\begin{align} 1451\div16&=90......B\\ 90\div16&=5......A\\ 5\div16&=0......5 \end{align}

结果由下向上取余数为:5AB。

用Excel进制展示:

由上图可以得出,如果要使用二进制来表示 0 ~ 9 这几个数,最少需要 4 位的二进制数。

文字信息的存储

在计算机中,所有信息都是通过编码后再存储在计算机中的,也就是说所有的数据最后都要转换成二进制的形式存储于计算机中。根据前面讲的进制转换,我们可以这样认为,在计算机存储十进制的数字,就是利用进制转换编码成二进制码,然后才被计算机识别和存储的。由此可以推出,如果我们不满足只能存储十进制数字,还需要存储字母,符号等等。那我们就用更多位的二进制数来代表字符或者是符号,而这个过程就称作编码。将这些二进制还原成字符或者符号呈现给我们的过程称作解码。而计算机最通用的 ASCII码就是利用 8 位二进制数来编码的,如下图,里面包含了 26 个字母的大小写,标点符号和一些特殊符号。

比如我们要查找 a 的 ASCII 编码,看上图左边后 4 位b_1\sim b_4是 0001,上面前 3 位b_5\sim b_7是 011,合起来就是二进制数 110 0001,转换成十进制数就是 97,所以小写字母 a 的 ASCII 编码数为 97,用 MATLAB 中的 char 函数检验:

    char(97)
    ans = 
         a

还可以看出,一个字节的内存就可以完成ASCII表的编码。

字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,1个字节等于8位二进制。
1 Byte = 8 bit, 1 KB = 1024 Byte, 1 MB = 1024 KB, 1 GB = 1024 MB, 1 TB = 1024 GB

但是,仅仅存储一些英文字母和符号还是不能满足我们,还有中文的其他国家的字符呢?那就多用几个字节来存储,于是就有了后面的 GBK 编码和 Unicode编码。

图片信息的存储

既然我们已经知道了用二进制去表示所有进制的数字,利用编码去表示字符,那我们怎么使计算机利用编码来存储图片呢?我们利用 MATLAB 来分析两种类型的图片,灰度图和彩色图。已知素材图如下:

我们把它转换为灰度图进行分析:

img = imread('0003.jpg'); 
gray = rgb2gray(img);
imshow(gray)

生成图片为:

我们输入 whos 指令查看上面的数据,结果为:

whos
  Name      Size          Bytes     Class     Attributes

  gray      308x402       123816    uint8
  img       308x402x3     371448    uint8

分析上面的图片数据,gray 为灰度图数据,img 为彩色图数据,我们知道 gray 是一个 308x402 的二维数组,数据类型为 8 位无符号整型,这些数据都表示的是图片什么的特性呢?因为灰度图像素值量化后用一个字节(8位)来表示。如把有黑-灰-白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。黑白照片包含了黑白之间的所有的灰度色调,每个像素值都是介于黑色和白色之间的256种灰度中的一种。在彩色图中,每个像素点都有三层,这是因为在计算机中颜色显示原理遵循色光三原色,24位图像就是每一原色位为8位,即R,G,B分别为8位(0~255),在前面,我们用Matlab将三原色层分别提取出来可以看出色彩是如何叠加的。

clear
clc
img = imread('0003.jpg'); 
% 红色图层
red = img;
red(:,:,2:3) = 0;       %其他色层赋值为0
figure
imshow(red)
% 绿色图层
green = img;
green(:,:,1) = 0;       %其他色层赋值为0
green(:,:,3) = 0;       %其他色层赋值为0
figure
imshow(green)
% 蓝色图层
blue = img;
blue(:,:,1:2) = 0;      %其他色层赋值为0
figure
imshow(blue)

输出结果为:

三层RGB图像数据组成的三维数组就是构成一张像素彩图。

音频信息的存储

用Matlab读入音频文件Annie.mp3,并画出音频波形图:

clear
clc
[y Fs] = audioread('Annie.mp3');
plot(1:size(y),y)
sound(y,Fs)

运行结果为:

其存储原理也是如此,至于视频,就是图像加音频的结合。

总结

不管是文字、图片、视频,还是别的文件,都是最终转换成机器码,也就是二进制数据 0 和 1 ,存储在计算机中的。一切数据的存储和读取,都是在编码和解码中完成的。

编辑于 2017-05-28 10:24