数据的机器层次表示
1.数值数据的表示
1.1计算机中数值数据
十进制(D)
二进制(B)
八进制(Q)
十六进制(H)
同时,在C语言中,八进制常以前缀0开始,十六进制常数常以前缀0x开始
1.2无符号数和带符号数
- 无符号数:就是整个机器字长的全部二进制位均表示数值位(没有符号位),相当于数的绝对值
- 带符号位:即有正负。用“+”、“—”号加绝对值表示数值的大小,用这种形式表示的数值在计算机中称为真值
- 所谓机器数,就是将真值的符号数码化,约定二进制数的最高位为符号位,“0”表示正号,“1”表示负号
1.3原码表示法
1.4补码表示法
使符号位参加运算,从而简化加减法的规则;使减法运算转化成加法运算,从而简化机器的运算器电路
补码表示:
- 符号位与原码相同
- 数值部分与数的符号相关,对于正数,数值部分与真值形式相同,对于负数,其数值部分为真值形式按位取反,且在最低位+1
1.5反码表示法
- 符号位表示方法与原码相同
- 数值部分的表示与数的符号有关,对于正数,数值部分与真值形式相同,对于负数,数值部分为真值形式按位取反
1.6:3种机器数比较
示例:
2.机器数的定点表示、浮点表示(重点!!!)
引子:
真值:100.25 =1100100.01B=64.4H=144.2Q
计算依据可为:
x x x x x x . x x x x
64 32 8 4 2 1 0.5 0.25 0.125
计算机在进行算数运算时,需要指定小数点的位置。根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示,浮点表示
2.1定点数
- 定点表示法中约定:所有数据的小数点位置固定不变,通常把小数点位置固定不变。把小数点固定在有效数位的最前面或末尾,形成两类定点数
(1)定点小数
- 定点小数:小数点的位置固定在最高有效数位之前,符号位之后。定点小数的小数点位置是隐含约定的,小数点并不需要真正的占据一个二进制位
设机器字长为n+1,Xs为符号位,剩下的n位为数值位
原码范围 | 补码范围 |
---|---|
-(1-2 ^-n)~1-2 ^-n | -1~1-2 ^-n |
(2)定点整数
- 定点整数及纯整数,小数点位置隐含固定在最低有效数位之后
设机器字长为n+1,Xs为符号位,剩下的n位为数值位
原码范围 | 补码范围 |
---|---|
-(2 ^n-1)~2 ^n-1 | -2 ^n~2 ^n-1 |
2.2 浮点数
让小数点的位置根据需要而浮动,就是浮点数
N=M*r ^E
r是浮点数阶码的底,与尾数的基数相同,通常r=2;
E、M都是带符号的定点数,(E叫做阶码,M叫做尾数);尾数为纯小数,常用原码或补码表示;阶码为纯整数,常用移码或补码表示
(1)一般浮点形式
es为阶码的符号位,ms为尾数的符号位
规格化浮点数
为提高运算精度,需要充分利用尾数的有效位数,防止有许多无效0占用空间,如二进制数0.0001101可表示为0.001101 * 2^-1, 0.01101*2^-2, 0.1101 *2 ^-3,只有0.1101 *2 ^-3是规格化数
规格化的尾数M的绝对值必须在:
1/r<=|M|<1
若r=2,则1/2<=|M|<1
数值 | 真值 | 原码 |
---|---|---|
0.75 | 0.11 | 0.11 |
0.625 | 0.101 | 0.101 |
0.5 | 0.1 | 0.1 |
0.25 | 0.01 | 0.01 |
0.125 | 0.001 | 0.001 |
由上述数据可知,在尾数用原码表示时,规格化浮点数的尾数的最高位数总等于1,(0.1xxxxx)
数值 | 真值 | 补码 |
---|---|---|
-0.875 | -0.111 | 1.001 |
-0.625 | -0.101 | 1.011 |
-0.5 | 0.1 | 1.1 |
-0.375 | -0.011 | 1.101 |
-0.25 | -0.01 | 1.11 |
-1 | -1.0 | -1.0 |
由上述数据可知,在尾数用补码表示时:
1.正数:最高数为为1(0.1xxxxx)
2.负数:ms(补码的符号位)异或尾数的最高位==1
(异或):相同为0,不同为1
阶码的移码表示
用移码表示阶码:(n+1)位字长,一般在补码基础上进行+2^n操作
1.用移码方便比较大小
2.移码:补码的符号位取反
3.移码、补码中0的表示形式唯一
举例:设机器字长为8位,则应在补码的基础上+2^7=>移码
分析:当根据补码判断大小时正数与负数判断麻烦,而移码操作非常容易
数值 | 补码 | 移码 |
---|---|---|
+127 | 0111 1111 | 1111 1111 |
+126 | 0111 1110 | 1111 1110 |
… | ||
+1 | 0000 0001 | 1000 0001 |
0 | 0000 0000 | 1000 0000 |
… | ||
-126 | 1000 0001 | 0000 0001 |
-127 | 1000 0000 | 0000 0000 |
(2)IEEE754标准
ms:符号位(1位)
E:阶码部分,用移码来表示(8位)
m:尾数部分,用原码来表示(23位)
一般考虑短浮点数,移码的偏置值为127
涉及两种问法:
(1)将十进制(100.25)转换成短浮点数格式
(2)把短浮点数(C1C90000H)转换成十进制数
(3)基本解题思路及注意事项:
(1)把十进制转换成二进制
(2)规格化二进制数(当取尾数时,不拿小数点前的1)
例如:1.1*2^2中,小数点前的1可省略,所以m中实际存储24位
(3)计算出阶码的移码【偏置值+真值】(可先在十进制中运算,再转换成二进制:127+6)
(4)以短浮点数格式存储该数(并转换为十六进制)
题目练习:
2.3 非数值数据的表示
ASII码用7位二进制表示一个字符,通常用1位来做奇偶校验位,用来检查错误
2.4 十进制数和数串的表示
BCD码:用4位二进制数来表示1位十进制数,称为二进制编码的十进制数
例如8421码:它是一种 有权码,设其各位的值为B3 B2 B1 B0,则他表示的十进制则为,8B3+4B2+2B1+1B0
2.6 数据校验码(重点)
数据校验码:是指那些能够发现错误或能够自动纠正错误的数据编码
码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数即为码距
例如:用四位二进制表示16种状态,中则有16个不同的码字,此时码距为1,即两个码字之间最少仅有一个二进制位不同(0000与0001)
1.奇偶校验码
实现方法:由若干位有效信息,再加上一个二进制位(校验位)组成校验码
奇校验:整个校验码中1的个数为奇数
偶校验:整个校验码中1的个数为偶数
例如:(发送方)采用奇校验:10110011->(接收方)001100011【可检验出差错】,若为00100011【不可检验出差错】
2.海明校验