一、数值
- 正负数在计算机中的表示
在计算机中,只有0和1两种形式,为了表示正数和负数,就要将数的符号以“0”和“1”编码。
通常把一个数的最高位定义为符号位,用“0”表示正,“1”表示负,称为数符,其余为依然表示数值。
数值在计算机内采用符号数字化后,计算机就可以识别和表示数符了。但若将符号位同时和数值参加计算,由于两操作符的问题,有时会产生错误结果。如-5+4=-1,但是按以上计算方式,则运算如下:
1 0 0 0 0 1 0 1 (-5的机器数)
+ 0 0 0 0 0 1 0 0 (4的机器数)
= 1 0 0 0 1 0 0 1 (-9)
计算-5+4结果为-9,计算显然有误。若单独考虑符号位的处理,则运算会变得很复杂。为了解决此类问题,在机器数中,符号数有多种编码方式,常用的是原码、反码和补码,其实质就是对负数表示的不同编码。
- 原码
整数X的原码指其数符为0表示正,1表示负,其数值部分就是X绝对值的二进制表示,如:
[+1] = 00000001 [+127]=01111111
[-1] = 10000001 [-127] =11111111
采用原码表示法时,编码简单,与其值转换方便,但存在以下问题:
1、0有两种表示方式,0的二义性给机器判断带来诸多麻烦
[+0] = 00000000 [-0]=10000000
2、用原码做四则运算时,符号位需要单独处理,增加了运算规则的复杂性。
于是反码出现了!!
- 反码
整数X的反码指对于正数,与原码相同;对于负数,数符为1,其数值位X的绝对值取反。如:
[+1] = 00000001 [+127]=01111111
[-1] = 11111110 [-127] =10000000
在反码中0也有两种表示方式
[+0] = 00000000 [-0]=11111111
因此反码运算也不方便,很少使用,一般用作求补码的中间码
- 补码
整数X的补码指对于正数,于原码、反码相同;对于负数,数符为为1,其数值位Xd的绝对值取反后加1,即为反码加1。如:
[+1] = 00000001 [+127]=01111111
[-1] = 11111111 [-127] =10000001
在补码表示中0只有唯一的编码
[+0] = [-0] = 00000000
利用补码可以方便的进行计算
如-5+4=-1,运算如下:
1 1 1 1 1 0 1 1 (-5的补码)
+ 0 0 0 0 0 1 0 0 (4的补码)
= 1 1 1 1 1 1 1 1
其运算结果补码为11111111, 符号位为1,即为负数。已知补码为11111111,再反求其原码可得其真值为10000001,即为-1,计算正确。
原码、反码、补码之间转换关系如下:
浮点数在计算机中的表示
略
二、字符编码
字符编码不做过多的描述,但是很多开发语言,比如C++、Java、Python等都有一种数据类型-字符串,其中字符串涉及到了比较特殊的一个编码问题在其它位置详细解释。
三、声音编码
声音是由空气中分子振动产生的波,波传到人们的耳朵引起耳膜振动就是人们听到的声音。
若要用计算机对声音处理,就是将模拟信号转换成数字信号,这一转换过程称为模拟音频的数字化。主要涉及声音的采样、量化和编码。
采样是每隔一定时间间隔在声音波形上去一个幅度值,把时间上的连续信号变成时间上的离散信号。该时间间隔则为采样周期,其倒数为采样频率。
量化是将每个采样点得到的幅度值以数字存储。
编码是将采样和量化后的数字数据以一定的格式记录下来。编码方式很多,常用的编码方式是脉冲编码调剂,其主要优点是抗干扰能力强、失真小、传输特性稳定,但编码后的数据量大。
四、图形和图像编码
在计算机中,图形和图像是一对既有关联又有区别的概念,都是一幅图,但是图的产生、处理、存储方法却各有不同。
图形一般是指通过绘图软件绘制的由直线、圆、圆弧、曲线等图元组成的画面,以矢量图的形式存储。
图像是由扫描仪、数字照相机、摄像机等外部输入设备捕捉真实画面产生的映像,数字化后以位图形式存储。
计算机要对图形和图像处理,需要经过图像数字化的过程。图像的数字化是指将一幅真实的图像转变成为计算机能够接受的数字形式,涉及对图像的采样、量化以及编码等。
采样是将二维空间上连续的图像转换成离散点的过程,实质就是用多少个像素点来描述一幅图像,就是我们常说的图像分辨率,用 “列数x行数”表示,分辨率越高,图像越清晰,存储量越大。
量化是在图像离散化后,将表示图像色彩浓淡的连续变化值离散化为整数指的过程。
编码是将图像采样和量化后的数字数据转换成二进制数码0和1表示的形式。
图像的文件大小由分别率和像素位的颜色深度决定:
图像字节数(MB)=列数x行数x颜色深度/8