一、数值型数据的表示方法
一个数值型数据的完整表示需三个方面:
- 进位计数制
- 符号的数字化(机器数)
- 小数点的处理
1.1 进位计数制
两个基本要素:
权(与所在数位相关的常数)
基数 每个数位中所允许的最大数码值+1或每个数位中所允许的数码个数
权与基数的关系 相邻两位的权值之比等于基数值
各种进位计数制的表示
二进制 权是
,基数是 八进制 权是
,基数是 十进制 权是
,基数是 十六进制 权是
,基数是 各种进位计数制的相互表示
(binary-octal-decimal-hexadecimal)
1.1.1 十进制计数
- 基数为十:0~9
- 位权为
如果有
1.1.2 二进制计数
- 基数为二:0~1
- 位权为
如果有
1.1.3~4 八进制/十六进制
同理
1.1.5 二进制数的特点
二进制数只有
两个数码,可以用晶体管的通断或脉冲的有无表示一位二进制数 二进制数的运算规则简单,其特点是逢二进一,借一当二
1.2 数制转换
1.2.1 二进制与十进制间的转换
- 十进制数转换为二进制数
- 整数部分:除以2取余数直到商为
- 小数部分:乘以2取整数直到小数为
- 二进制数转换为十进制数 按权位展开求和
1.2.2 八进制、十六进制与二进制数的转换
二进制数转换为八进制数
从小数点起每三位一组,整数部分不够三位时在前面添
,小数部分不够三位时在后面添 。 二进制数转换为十六进制数
从小数点起四位一组,整数部分不够四位的在前面添
,小数部分不够四位的在后面添 。 八进制数和十六进制数转换为二进制数
- 八进制数转换为二进制数:每
位八进制数字写成 位二进制数字即可。 - 十六进制数转换为二进制数:每
位十六进制数字写成 位二进制数字即可。
- 八进制数转换为二进制数:每
1.2.3 十进制数与八进制数、十六进制数间的转换
1.3 带符号数的代码表示
- 真值:用正负符号加绝对值表示数值
- 机器数、分类及组成
- 机器数的定义:在计算机内部使用的,连同数符一起数码化了的数
- 分类:源码、补码、反码
- 组成:符号位部分+有效数值部分
1.3.1 真值与机器数
一个带符号的数由两部分组成,一部分表示数的符号,另一部分表示数的数值。符号位习惯以
若以正号“+”和负号“-”来表示有符号的二进制数,称为符号数的真值。
计算机中使用的符号数称为机器数。
如
表示为 ,而 表示为 。
1.3.2 原码
原码又称“符号-数值表示”,在以原码表示的正负数中,第一位为
(正数);为 (负数)。如: 记为 ; 记为 。
- 若二进制整数的原码序列为
则
- 若二进制小数的原码序列为
则
原码的性质
当二进制数
为正数时,对应的原码 和 只是增加了一位用 表示的符号。由于在数的左边增加一位 对该数值无影响,所以 就是 本身。 当二进制数
为负数时,对应的原码 就是在原二进制数前增加一位用 表示的符号位。 在原码表示中,有两种不同形式的
。 即
符号位不是数值的一部分,它们是人为约定的,
为正, 为负。所以符号位在运算中要单独处理,不能当作数值的一部分直接参加运算。
1.3.3 反码
反码又称“1的补码”,用反码表示时,左边的第一位也为符号位,
代表正数, 代表负数。对于负数,反码的数值是将原码数值部分按位求反,符号位 保持不变。而对于正数,反码和原码相同。
- 若二进制整数的反码序列为
则
- 若二进制小数的反码序列为
则
反码的性质
正数的反码与原码相同
负数的反码的符号位为
,其余位按位取反 反码表示中,有两种不同形式的
即
反码就是除符号位外,用同样字长的全
码减去该数的绝对值而得,所以反码称为 的补码
1.3.4 补码
补码又称“对2的补数”,补码表示法是:如果数为正,则正数的补码与原码表示形式相同;如果数为负,则将负数的原码除符号位外,其余各位取反后末尾再加
- 若二进制整数的补码序列为
则
- 若二进制小数的补码序列为
则
补码的性质
正数的补码,反码和原码相同
对于负数,补码的符号位为
,数值部分是对原码每位求反后尾数加 补码表示中
的形式唯一 即
根据我们对补码表示方法的描述可知:
所以补码又称为
1.3.5 机器数的加减运算
- 原码计算
直接算,注意符号位不同时需比较绝对值大小
- 补码运算
运算规则:两数和的补码等于两数的补码之和。而两数差的补码也可以用加法实现。
- 反码运算
运算时,符号位参加运算,如果符号位产生了进位,则该进位应该加到和数的最低位,称之为“循环进位”。
运算结果符号位为
1.4 数码和字符的代码表示
1.4.1 十进制数的二进制编码
由于人们习惯使用十进制数,而电路单元最适宜于二进制操作,于是出现了一种用二进制码编写的十进制码,即二—十进制码,或称 BCD码。
十进制数 | 8421码 | 余3码 | 2421码 | 5421码 |
---|---|---|---|---|
0 | 0000 | 0011 | 0000 | 0000 |
1 | 0001 | 0100 | 0001 | 0001 |
2 | 0010 | 0101 | 0010 | 0010 |
3 | 0011 | 0110 | 0011 | 0011 |
4 | 0100 | 0111 | 0100 | 0100 |
5 | 0101 | 1000 | 1011 | 1000 |
6 | 0110 | 1001 | 1100 | 1001 |
7 | 0111 | 1010 | 1101 | 1010 |
8 | 1000 | 1011 | 1110 | 1011 |
9 | 1001 | 1100 | 1111 | 1100 |
1.4.2 可靠性编码
格雷码(循环码)
特点:任意相邻两个代码之间只有一位状态不同,这样在计数过程中就不会出现其它代码,译码时就不会产生抖动和毛刺。 将二进制转换到格雷码的方法为:保持最高位不变,其他位与前面一位异或。
奇偶校验码
在数据中加入校验位,校验位的加入如果使整个代码中的“1”的个数为奇数,称奇校验。
若使整个代码中的“1”的个数为偶数,称偶校验。
1.5 数的定点表示与浮点表示
1.5.1 定点表示法
在计算机中,小数点位置固定不变的数称为定点数。表示数的范围和分辨率固定不变
- 无符号定点整数:略去符号位的正整数。
- 带符号定点整数:是纯整数,小数点在最低位之后,最高位为符号位。
- 带符号定点小数:是纯小数,用原码或补码表示。
1.5.2 浮点表示法
是一种小数点位置不固定可随需要浮动的数。
浮点数格式
浮点数的代码由两部分组成:阶码
与尾数 。 浮点的真值
式中
是阶码的底,一般选择与尾数 的基数相同, 是隐含约定的常数,不直接表示在浮点数代码之中。例如尾数为二进制,基数为 ,则选择 。
是阶码,也就是比例因子RE的指数值,为二进制正负整数,可用补码或移码表示(有关移码的概念将在后面介绍)。若阶码 为正,表明尾数M将被扩大若干倍。若 为负,表明M将被缩小若干倍。
是尾数,为带符号定点小数,可用补码或原码表示。
移码(增码)
前面提到的移码也称为增码,常用于表示浮点数的阶码中。移码定义如下:
若阶码(连同一位符号位)共
式中
移码的性质
- 最高位为符号位,但其取值与原码、补码正好相反。
- 除符号位相反之外,移码的其余各位与补码相同。这是由于移码平移了
,而补码则平移了 (模值)。 - 让
从 逐渐增至 ,相应地 从 逐渐增至 ,呈递增状。可见采用移码能更直观地比较正负阶码的大小,例如 与 之间的比较。
1.5.3 表示范围与精度
1.5.4 IEEE754标准浮点格式
类型 | 数符(位) | 阶码(位) | 尾数数值(位) | 总位数(位) | 偏置值(十六进制) | 偏置值(十进制) |
---|---|---|---|---|---|---|
短浮点数 | 1 | 8 | 23 | 32 | 7FH | 127 |
长浮点数 | 1 | 11 | 52 | 64 | 3FFH | 1023 |
临时浮点数 | 1 | 15 | 64 | 80 | 3FFFH | 16383 |
短浮点数又称为单精度浮点数,长浮点数又称为双精度浮点数,它们都采用隐含尾数最高数位(
)的方法,这样,无形中又增加了一位尾数,因此,相应地尾数真值实际上等于1+(23位尾数数值或52位尾数数值)。 临时浮点数又称为扩展精度浮点数,它没有隐含位,尾数真值就等于64位尾数数值。
单精度浮点数计算公式
M: 尾数,表示小数
E: 阶码
双精度浮点数计算公式
特殊定义
- 阶码
全零且 也全零时 - 阶码
全零但 并非全零时,阶码 解析为 , 解析为实际值(即不加1) - 阶码
全 且 全零时, - 阶码
全 且 并非全灵时,
二、字符的表示方法
2.1 ASCII 码
国际上广泛采用美国信息交换标准码(American Standard Code For Information Interchange)作为标准,简称为ASCII码。 在ASCII字符集中共有128种常用字符,每个ASCII字符自身有七位编码,存储器中的一个字节单元正好可以存放一个ASCII字符编码与一位奇偶校验位。这样,存储器也就常以字节为一个存储单元的编址单元。
2.2 汉字编码简介
汉字也是字符,是中文的基本组成单位。由于汉字数量极大,接近7万个,字形复杂、异体字多、同音字多,因此,汉字信息的处理比西文复杂得多。汉字信息的处理一般包括汉字的编码、输入、输出、存储、处理与传输。
2.2.1 汉字输入码
每个汉字用一个或几个键输入的编码来表示。这种编码方式称为汉字的输入编码,也称外码。 目前汉字的编码方案有几百种之多,较常使用的也有几十种之多。归纳起来,所采用的方法可分为数字码、拼音码、字形码、音形结合、以及具有某些提示和联想功能的编码等几类。
2.2.2 汉字内部码
汉字内部码也称机内码,它是计算机内部供存储、处理、传输用的代码,简称内码,是汉字在设备或信息处理系统内部最基本的表达。目前国内采用的内部码有四十种左右。
2.2.3 汉字交换码
如前所述,早期的各种汉字系统的内码不统一,因此在各汉字系统之间或汉字系统与通信系统之间进行汉字信息交换(即传输)时,需要制定一种编码标准,即汉字交换码。 我国制定了《信息处理交换用的七位编码字符集》,后来成为国家标准GB1988。除个别字符(如货币符号)外,GB1988与ASCII是一致的,可视为ASCII的中国版本。