浮点数及字符在计算机中的表示

来源:互联网 发布:单片机系统电路原理图 编辑:程序博客网 时间:2024/06/05 19:46

在计算机中,与所有的其他数据一样,浮点数也要用二进制表示,然而浮点数的二进制表示比整数稍微复杂些.根据IEEE 754标准规定:

1.浮点数的规格化表示.用如下形式:规格化数 = 数符*1.XXX...XXX*2^(指数);


2.单精度浮点数存储占用4个字节,即32位,存储格式如下:


数符(1位)阶码(8位)尾数(23位)

1.正浮点数时,数符位为0,否则为1;

   2.规格化数中的"1."不存储,目的是为了节省空间.

   3.阶码等于规格化数中的指数+127,即阶码=指数+127.因为指数是(-126~127),为了能够处理负指数的情况,IEEE754要求指数加上127存储.


3.双精度浮点数存储占用8个字节,即64位,存储格式如下:

与单精度数的结构化原则一样,不同的是    阶码=指数+1023.

数符(1位)阶码(11位)尾数(52位)


4.字符

字符,包括西文字符 (英文字母/数字/各种符号)中文字符,即所有不可做算术运算的数据.

由于计算机中的数据都是以二进制的形式存储和处理的,因此字符也必须按特定的规则进行二进制编码才能进入计算机存储和处理.

字符编码的方法很简单,首先确定需要编码的字符总数,然后将每一个字符按顺序确定顺序编号,编号值的大小无意义,仅作为识别与使用这些字符的意义.字符的个数决定了编码的位数.就像在大学中用一个学号表示某个学生,学生越多,学号的位数也就越多一个道理,本身这个学号是没有意义的,只是一个索引,关键是它所指向的对象.

1.西文字符的编码

   对西方字符编码最常用的是ASCII编码(American Standard Code for Information Interchange,美国信息交换标准代码).用 7位二进制码表示,它可以表示2^7=128个字符.这对于所有的西方字符已经足够.要熟悉7位ASCII码表.


   

在ASCII码表中,十进制码值0~32和127共34个字符称为非图形字符(控制字符);其余的94个字符称为图形字符(普通字符).并且有个特点,0~9/A-Z/a-z都是顺序排列的,且小写字母比对应的大写字母的码值大32,即d5 为0或者1. 编码时考虑的这个规律,可以让大小写转换更方便.


★下面这些特殊字符的编码,其相互关系需要牢记:

字符'a' 的编码为 110 0001 ,对应的十/十六进制分别是97/61H.

字符'A' 的编码为 100 0001,对应的十/十六进制分别是65/41H;小写字母的编码比大小字母的编码大32.

数字字符'0' 的编码为 011 0000,对应的十/十六进制分别是48/30H.

数字字符' ' 的编码为010 0000,对应的十/十六进制分别是32 和20H.(H表示十六进制Hex)


计算机内部存储和操作以字节为单位,即以8个二进制位为单位.因此一个字符在计算机内实际是用8位表示的. 而ASCII 是7位编码,多出来一位,在正常情况下,字节的最高位d7为0.在需要奇偶校验时,这一位可用于存放奇偶校验的值, 此时这一位称为校验位.



★出现一个问题,数值和字符都是用二进制表示的,那对应一个孤立的字节,如何确定它是一个数还是一个字符呢??? 比如'A'与65,二进制都是 0100 0001.

    答: 其实计算机的CPU,内存是不会去分这个是字符还是数值,但存储和使用这个字节的软件会以其它方式保存有关类型的信息,指明这个数据是何类型的.???(书上的这个解释太笼统了,到底是如何保存类型信息的,它并没有说明. 查清楚,再过来更改!!!@_@)


★英文是拼音文字,通过键盘输入时采用不超过128种字符的字符集就能满足英文处理的需求,编码容易;而且在一个计算机系统中,输入与内部处理和存储都可以使用同一编码(一般为ASCII). 但是,汉字是象形文字,各类繁多,编码比较困难,而且在一个汉字处理系统中,输入/内部处理/输出 对汉字编码的要求不尽相同,因此要进行一系列的汉字编码及转换.


汉字处理系统的流程图:


汉字输入------>输入码------>国标码------>机内码------>字形码------>汉字输出


1>汉字输入码

汉字输入码就是利用键盘输入汉字时所用的编码.

常用的分为两类:音码类:搜狗拼音等按拼音

   形码类:五笔字形等按字形


衡量输入码的好坏:1.编码短,可以减少敲击次数;重码少,可以实现盲打;好学好记.

不管哪种输入码,都是操作者向计算机输入汉字的手段,在计算机内部,都是以汉字机内码表示.

2>汉字国标码

汉字国标码是我国1980年发布的<标准信息交换汉字编码>,代号为GB2312-80,简称国标码.每个汉字的编码占两个字节,使用每个字节的低7位,共14位,最多可编码2^14个汉字及符号.

规定: 所有的国标汉字和符号组成一个(十进制)94 * 94的矩阵,即 94个区 和 94个位,由区号位号共同构成区位码. 例如:'中'位于第54区48位,区位码(在区中的位置表示)为5448,十六进制为3630H.

将区位码转换成国标码:知道了区位码,将区码和位码各加32(20H)就变成了国标码,这是为了与ASCII码兼容,每个字节值都大于32(在ASCII中,0~32为非图形字符码值),所以'中'的国标码为 8680.


3>汉字机内码:一个国标码占两个字节,每个字节的最高位为0;而英文字符的机内码是7位ASCII码,最高位也为0; 为了在计算机内部区分汉字的编码与西文的编码,将国标码的每个字节的最高位由0变为1,变换后的国标码称为汉字机内码. 变成1后,汉字机内码的值则都会大于128,而每个西文字符的ASCII值则均小于128.这样,就完全把汉字机内码与西文机内码完全隔离开来,不会造成混乱.非常好的规则.


转换规则: 

汉字机内码=国标码+8080H(128,128)=区内码+2020H(32,32)+8080H(128,128)=区内码+A0A0H;

国标码=区内码+2020H(32,32);

例子: 汉字 区位码 汉字国标码 汉字机内码 

  '中' (36 30)H(56 50)H =(01010110,01010000)B(D6 D0)H=(11010110,11010000)B

  '华' (1B0A)H(3B 2A)H =(00111011,00101010)B(BB AA)H=(10111011,10101010)B 


4>汉字字形码

汉字字形码:又称为汉字字模,用于汉字的显示输出打印机输出. 汉字字形码通常有两种表示方式:点阵矢量 表示法. 

用点阵表示字形时,汉字字形码指这个汉字字形点阵的代码.根据输出汉字的要求不同,点阵的多少也不同.简易型汉字为16*16点阵(就是矩阵).提高型汉字为24*24点阵/32*32点阵/48*48点阵等.要用一张点阵图更加直观地体现:



点阵规模越大,字形愈清晰美观,但所点空间自然就越大.以16*16的点阵表示一个汉字,所占空间为256个二进制位.16*16=256bit/8=32Byte. 而二级汉字就要占用256KB.因此,字模点阵只能用来构成"字库",而不用于存储.

矢量表示方式存储的是描述汉字字形的轮廓特征,即字的关键点其边线的数学信息,当要输出汉字时,通过对上述信息的计算生成所需要的汉字的大小和形状的汉字点阵.于是,就解决了汉字用点阵存储空间过大的问题.而且矢量字体描述与最终文字显示的大小/分辨率无关,不会产生变形/变色,因此可用于高质量输出.(补充相关信息:矢量字体的格式目前有三种,Type1/TrueType/OpenType,用三 or 二次贝塞尔曲线关键点来描述字形)


5>汉字交换码

汉字交换码是指不同的具有汉字处理功能的计算机系统之间在交换汉字信息时所使用的代码标准.自国家标准GB2312-80公布以来,我国一直延用该标准所规定的国标码作为统一的汉字信息交换码.

GB2313-80标准包括了6763个汉字,按其使用频度分为一级汉字3755个和二级汉字3008个.一级汉字按拼音排序,二级汉字按部首排序.此外,该标准还包括标点符号/数种西文字母/图形/数码等符号682个.

由于GB2312-80是1980年制定的标准,在实际应用时常常感到不够用,所以,建议处理文字信息的产品前采用新分布的GB18030信息交换用汉字编码字符集,这个标准集繁/简体于一平台,可解决两岸三地间GB码与BIG5码间的字码转换不便的问题.非常全面,而且还包括了常用的少数民族语言.采用单字节/双字节/四字节  3种方式编码.

Unicode码:

不得不说Unicode码,它是另一个国际标准编码,为每种语言中的每个字符(包括西文字符)设定了一个唯一的二进制编码.便于统一地表示世界上的主要文字.以满足跨平台/跨语言进行文本的转换和处理的要求.Windows内核已经支持Unicode字符集,这表明内核可以支持全世界所有的语言文字.




0 0
原创粉丝点击