进制与进制转换,进制也就是进位制,是人们规定的一种进位方法。对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。计算机中使用二进制,我们平常数学中使用十进制,计算机编程更多用到十六进制。
在Excel中B列填充序列十进制数0~15,在A列和C列输入公式=DEC2BIN和=DEC2HEX将B列的数据转换成二进制和十六进制。由表可知,表示完整的十六进制需要4位二进制数。
文字信息的存储,文字信息通过编码来储存,拿ASCII码举例,ASCII码使用指定的7位二进制数组合来表示128种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。其中:0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10和13分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字;65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。如下表:
ASCII码用7位来储存,从00~7F,这就是编码,0000 0000~0111 1111足以表示所有的英文字符,其余的GBK码和Unicode码都是同样的原理,只是一个字符所占的字节不一样,这就是为什么在计算机上一个英文字符占一个字节,一个中文字符占用两个字节,其中一个字节为8位。
在MATLAB中用char函数求出数值对应ASCII码:
>> char(97) ans = a >> char(98) ans = b
图片信息的存储,图片信息在计算机中也是以0和1方式存储的,我们可以分两类图形来讲解,第一种是灰度图,第二种是彩色像素图,暂时不说矢量图。以24位真彩色图片为例,在Matlab进行分析:
clear clc a = imread('psb.jpg'); %在Matlab当前目录下存在图片psb.jpg,读入图片 figure(1) imshow(a) %显示原始图片 %分析灰度图数据 h = rgb2gray(a); figure(2) imshow(h) %分析彩色图 %红色图层 red = a; red(:,:,2:3) = 0; %其他色层赋值为0 figure(3) subplot(131) imshow(red) %绿色图层 green = a; green(:,:,1) = 0; green(:,:,3) = 0; subplot(132) imshow(green) %蓝色图层 blue = a; blue(:,:,1:2) = 0; subplot(133) imshow(blue)
运行结果:
我们可以看看此时Matlab工作区,原始彩色图数据a为一个313x402x3的无符号整形8位三维数组,这是为什么呢?我们看下原始图片的属性,图片的宽度和高度是402像素和313像素,每个像素点用8位数据来储存,我们先看灰度图数据h,这是一个313x402的二维数组,因为灰度图像素值量化后用一个字节(8位)来表示。如把有黑-灰-白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。黑白照片包含了黑白之间的所有的灰度色调,每个像素值都是介于黑色和白色之间的256种灰度中的一种。在彩色图中,每个像素点都有三层,这是因为在计算机中颜色显示原理遵循色光三原色,24位图像就是每一原色位为8位,即R,G,B分别为8位(0~255),在前面,我们用Matlab将三原色层分别提取出来可以看出色彩是如何叠加的。
音频信息的存储,用Matlab读入音频文件Annie.mp3,并画出音频波形图:
clear clc [y Fs] = audioread('Annie.mp3'); plot(1:size(y),y) sound(y,Fs)
运行结果:
其存储原理也是如此,至于视频,就是图像加音频的结合,在真实的存储过程中,会存在很多的压缩算法,并不是全部按照规整的01来存储的。