[音乐] 前面介绍了各类数值数据和非数值数据的
表示,所有数据在计算机中都是一个01序列 不同类型的数据,其数据的宽度是不一样的
例如short型数据占16位,float型数据占32位
double型数据占64位,int型数据在32位机器上占32位 此外还需要对主存、
磁盘等存储器的容量进行度量 因而也要有相应的数据长度的单位
那么在计算机中,数据长度和存储容量等的度量单位有哪些呢?
本讲主要介绍数据宽度和存储容量的度量单位
最基本的宽度就是位
因为我们前面讲过所有的信息都是按照0和1编码的
因此0或者1就是最基本的 单位,就是位,也叫bit。
那么二进制 的最基本的计量单位,我们用字节来表示 就是一个byte。
一个byte是8位,由8个位构成 一个字节。
那么在现代计算机中,存储器基本上都是按字节编址的
也就是说一个字节会给它编一个号,占用一个地址
因此呢,字节是最小的可寻址单位 那么以字节进行排列的话,那么我们用
LSB表示最低有效字节 MSB表示最高有效字节,就是每8位是一个字节
在最低位上的,那就是8位,是最低有效字节 那么除了刚才我们讲的位和字节以外
我们经常也用字作为长度的单位,那么这个字
和我们平常所说的字长,不是同一个概念
那么比如32位的英特尔架构,也就是说IA-32当中
它的字是16位,因为英特尔架构都是从最早的8086
然后发展而来的,而8086当时的字长是16位,所以
定义它的字,也就是16位,后来,发展成32位
机器,64位机器的时候,这个字的长度就一直没有变,一直是16位
IA-32,也就是32位架构,它的字长,就是32位的
但是它的字,一直是沿用早期的16位 所以我们可以说字和字长概念是不一样的
那么,字是16位,所以32位就变成了双字Double Word
64位呢,就变成了4倍的字 字和字长的概念不同,刚才我们讲了字
这个字实际上是一个体系结构,比如说IA-32这样的体系结构 它规定的它的长度。
那么字长实际上是,指定点数据通路的宽度
所谓数据通路,就是,我们前面讲的这个计算机
结构当中,这个寄存器,寄存器的宽度
寄存器取过来的数据,在ALU运算,这个运算的宽度 以及在这个传输路径当中这个传输路径的宽度。
比如说寄存器的内容送到ALU运算
需要把这个寄存器的内容传输到ALU,这个传输路径的宽度,以及运算的结果
也要送到存储器,或者送到寄存器。
那么这些 传输的这个路径的宽度,它们都是一致的 那么也就是说数据通路,是指CPU内部的数据
所流经的路径,就是我们刚才讲到的这些传输的通路,以及在这个传输过程当中
的运算部件、 存储部件,它们的这些宽度。
这些宽度都是匹配的,都是一致的 比如说,32位的,字长是32位的机器
那么这个寄存器的宽度就是32位,这边的这个传输的这个 两个这个线,总线的宽度也是32位。
运算出来的这个结果 进行传输过来的这个传输线,也是32位的
那么这样的话,只有匹配了以后,它才能进行工作 那么这样的这个数据通路当中这些存储部件、
运算部件、 传输部件 它们的宽度,是一致的,是32位
我们说这个字长就是32位,16位这个字长就是16位 这是数据通路的宽度。
刚才我们讲的 实际上也就是说数据通路宽度就是指CPU内部总线、
运算器、 通用寄存器 等等这些宽度,我们称为字长。
那么这些宽度都是相互匹配的,也就是说是完全一样的 字是我们刚才讲过的,是一个被处理的信息的单位
用来衡量这个数据类型的宽度,可以一样,也可以不一样
在这个英特尔的X86体系结构 当中,不管这个字长是多少,它的字都是16位的
那么早期的,比如说8086,80286,是16位的字长
然后从386开始就是32位字长了,也就是说8086,80286它的字和字长是
一样的,但是从386开始,字长是32位,而字还是16位 那么对于MIPS
32这个体系结构,它的 字是32位,字长也是32位,它是一致的
刚才我们讲过了,度量一个数据 长度,我们可以用位,用字节,用字来度量
那么实际上我们去度量一个 存储器的容量的时候,比如说主存的容量,磁盘
的容量的时候,经常要用的单位,比字、 字节要大得多
这些单位可以是千字节 可以是兆字节、
千兆字节、 兆兆字节 对应的就是KB、 MB、 GB、 TB
那么它们之间的关系是这样的,比如说 1KB等于2的10次方字节,就是1024字节
1个MB呢实际上就是KKB,1024KB GB呢就是1个KMB,就是1024的
兆字节,1个TB就是2的40次方,1024个GB 它们的关系是这样的。
那么实际上在通讯当中,带宽 它也有用到kb、 Mb、 Gb、 Tb这样的单位
那么这个单位它是一种速度单位,这边的这个k,实际上跟上面的这个K不一样
这个k是指10的3次方,而不是2的 10次方。
这边的兆在速度单位当中的这个大的M 它是10的6次方,G是10的9次方,T是10的12次方
也就是说在速度单位当中,M、 G、 T
包括这个k,都是10的幂次来表示的 如果把小b换成大B的话
那么表示的就是字节,而不是bit,bit不是位。
也就是说我们 在带宽里面,这个速度单位的时候
我们这边k、 M、 G、 T后面可以
用小b表示位,每秒多少 位。
也可以用大B,那么实际上是表示每秒 多少个字节,多少个T字节,多少个G字节
那么这里要说明的这个小k和大K,小k在这个计算机这个领域
我们表示单位的时候,这个小k一定是10的3次方 大K呢是1024,是2的10次方
而M、 G、 T等等,它没有区别。
那么这时候,它到底是表示 比如说这个M,到底表示10的6次方呢?还是
表示2的20次方呢?主要是看上下文,看上下文 那么程序当中,数据的宽度
它和编译器以及字长是有关系的
那么C语言当中,char类型是一个字节,这一个字节可以表示 一个字符,那它是一个非数值数据。
也可以表示一个8位的整数 那么不同机器上表示同一种数据类型有可能不一样,它跟这个
机器的字长相关。
比如说我们给出来典型的32位机器上面
short都是2个字节,不管是64位机器还是32位机器 都是2个字节。
int型的32位、 64位 机器上都是4个字节。
但是long型的,在32位机器上 是4个字节,到了64位机器上,那它就是8个字节。
那么这个指针 它在32位机器上是4个字节,在64位机器上它就是64位的,就是8个字节
然后float double在什么机器上都是一样的,因为它是IEEE 754
分别对应单精度和双精度,这个IEEE 754 这个标准就规定了它是32位和64位
所以不管在什么机器上面,它都是4个字节和8个字节。
那么这样的话,我们去写程序、 读程序的时候就要注意
不同的机器上面,有些数据类型,它的长度有可能 不一样。
它和这个同类型的数据,比如说 指针型的这个数据,并不是所有机器上都采用相同的宽度的。
它所占的 字节数和这个指令集体系结构、 机器字长、 编译器等等都有关系
比如说标准C里面,并没有规定long double的确切
精度,就是它的机器数的长度到底有多长,这个标准 C标准里面是没有规定的。
不同的平台就有不同的实现 比如说IA-32当中,它就是8个字节的,到了64位机器上
那它就是12字节。
在有些体系结构里面,它就是16个字节
这种类型,因为语言没有规定,它就跟平台有关,就跟这个指令集体系结构有关
[音乐] [音乐]