数据格式(定点表示 浮点表示)
2018-03-27 17:12
1511 查看
计算机常用的数据表示格式有两种:
定点表示:小数点位置固定(数值范围有限)
浮点表示:小数点位置不固定(数值范围很大)
表示方法:符号位+量值(尾数)
特点:
数的范围受字长限制,表示数的范围有限;
计算机中多用定点纯整数表示,所以将定点数表示的运算简称为整数运算
分类:理论上小数点位置可以任意,但实际上将数据表示成如下两种形式
纯小数(小数点固定在量值最高位的左边,即符号位与量值之间)
表示范围(量值为n位时): 0≤|x|≤1−2−n0≤|x|≤1−2−n
纯整数(小数点固定在量值最低位的右边)
表示范围(量值为n位时): 0≤|x|≤2n−10≤|x|≤2n−1
表示方法:
核心
任意一个二进制数N可以写成 N=2e.MN=2e.M (如同任意一个十进制数N可以写成N=10e.MN=10e.M )
其中 ee 是浮点数的指数,MM 是浮点数的尾数,两者都是有符号的
指数= 阶符+阶码
尾数= 数符+尾数
机器中的表示(早期的计算机中)
阶符+阶码+数符+尾数
IEEE754标准(规定了浮点数的表示格式,运算规则等)
基数2是固定常数,故可不表示出来
尾数用原码,但指数用移码(便于对阶和比较,不需要判断符号位),指数的阶符被隐含在移码里面,故可不表示出来
浮点数的规格化表示: 当尾数的值不为0时,尾数域的最高有效位应为1(类似于0.011强制要求用1.1∗2−21.1∗2−2表示),又因为最高位固定为1,即尾数域表示的值是1.M,故最高位的1也不予存储.
要除去E用全0和全1表示零和无穷大的情况,如本来是0~255则变成1~254
单精度(32位)
S是数的符号位,1位,在最高位,“0”表示正数,“1”表示负数
尾数用原码表示,故符号规则同原码
M是尾数, 23位,在低位部分,采用纯小数表示
注意这里是规格化表示的,即23位字段实际存储24位有效数
E是阶码,8位,采用移码表示。
真值e变为阶码E时加上固定的偏移量127,即E=e+127E=e+127
移码比较大小方便,表示范围从-126~+127移动到1~254
双精度(64位)
S是数的符号位,1位,在最高位,“0”表示正数,“1”表示负数
尾数用原码表示,故符号规则同原码
M是尾数, 52位,在低位部分,采用纯小数表示
注意这里是规格化表示的,即52位字段实际存储53位有效数
E是阶码,11位,采用移码表示。
真值e变为阶码E时加上固定的偏移量1023,即E=e+1023E=e+1023
移码比较大小方便,表示范围从-1022~+1023移动到1~2046
表示范围
例1(十进制数转浮点数)
十进制(20.59375)10(20.59375)10数 转换成 754标准的浮点数(32位)的二进制存储格式
分别将整数和分数部分转换成二进制数
得 20.59375=10100.1001120.59375=10100.10011
移动小数点,使其在第1,2位之间(格式化浮点数,小数点在最高位的1后)
得 10100.10011=1.010010011×2410100.10011=1.010010011×24
由真值e加偏移量(32位为127,64位为1023)得阶码E
E=e+127=4+127=131=10000011E=e+127=4+127=131=10000011
S=0S=0
M=010010011M=010010011
得32位浮点数的二进制存储格式(不满32位后面要补0)
0100 0001 1010 0100 1100 0000 0000 0000=(41A4C000)16(41A4C000)16
例2(浮点数转十进制数)
754标准存储格式为(41360000)16(41360000)16的浮点数 转 十进制数
将数展开,用二进制格式表示
得,0 100 00010 011 0110 0000 0000 0000 0000
根据对应位置,得
S=0S=0
e=E−127=10000010−01111111=00000011=(3)10e=E−127=10000010−01111111=00000011=(3)10
尾数补回隐藏位1,得
1.M=1.01101100000000000000000=1.0110111.M=1.01101100000000000000000=1.011011
故十进制数为
(−1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10(−1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10
定点表示:小数点位置固定(数值范围有限)
浮点表示:小数点位置不固定(数值范围很大)
定点表示
概念:所有数据的小数点位置固定不变表示方法:符号位+量值(尾数)
特点:
数的范围受字长限制,表示数的范围有限;
计算机中多用定点纯整数表示,所以将定点数表示的运算简称为整数运算
分类:理论上小数点位置可以任意,但实际上将数据表示成如下两种形式
纯小数(小数点固定在量值最高位的左边,即符号位与量值之间)
表示范围(量值为n位时): 0≤|x|≤1−2−n0≤|x|≤1−2−n
纯整数(小数点固定在量值最低位的右边)
表示范围(量值为n位时): 0≤|x|≤2n−10≤|x|≤2n−1
浮点表示
概念:小数点位置随阶码不同而浮动表示方法:
核心
任意一个二进制数N可以写成 N=2e.MN=2e.M (如同任意一个十进制数N可以写成N=10e.MN=10e.M )
其中 ee 是浮点数的指数,MM 是浮点数的尾数,两者都是有符号的
指数= 阶符+阶码
尾数= 数符+尾数
机器中的表示(早期的计算机中)
阶符+阶码+数符+尾数
IEEE754标准(规定了浮点数的表示格式,运算规则等)
基数2是固定常数,故可不表示出来
尾数用原码,但指数用移码(便于对阶和比较,不需要判断符号位),指数的阶符被隐含在移码里面,故可不表示出来
浮点数的规格化表示: 当尾数的值不为0时,尾数域的最高有效位应为1(类似于0.011强制要求用1.1∗2−21.1∗2−2表示),又因为最高位固定为1,即尾数域表示的值是1.M,故最高位的1也不予存储.
要除去E用全0和全1表示零和无穷大的情况,如本来是0~255则变成1~254
单精度(32位)
S是数的符号位,1位,在最高位,“0”表示正数,“1”表示负数
尾数用原码表示,故符号规则同原码
M是尾数, 23位,在低位部分,采用纯小数表示
注意这里是规格化表示的,即23位字段实际存储24位有效数
E是阶码,8位,采用移码表示。
真值e变为阶码E时加上固定的偏移量127,即E=e+127E=e+127
移码比较大小方便,表示范围从-126~+127移动到1~254
双精度(64位)
S是数的符号位,1位,在最高位,“0”表示正数,“1”表示负数
尾数用原码表示,故符号规则同原码
M是尾数, 52位,在低位部分,采用纯小数表示
注意这里是规格化表示的,即52位字段实际存储53位有效数
E是阶码,11位,采用移码表示。
真值e变为阶码E时加上固定的偏移量1023,即E=e+1023E=e+1023
移码比较大小方便,表示范围从-1022~+1023移动到1~2046
表示范围
单精度(32位)指数 | 单精度(32位)尾数 | 双精度(64位)指数 | 双精度(64位)尾数 | 表示的对象 |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0(结合符号位有正零和负零之分) |
0 | 非0 | 0 | 非0 | 正负规格化数 |
1~254 | 任意数 | 1~2046 | 任意数 | 正负浮点数 |
255 | 0 | 2047 | 0 | 正负无穷 |
255 | 非0 | 2047 | 非0 | 不是一个数(NaN) |
十进制(20.59375)10(20.59375)10数 转换成 754标准的浮点数(32位)的二进制存储格式
分别将整数和分数部分转换成二进制数
得 20.59375=10100.1001120.59375=10100.10011
移动小数点,使其在第1,2位之间(格式化浮点数,小数点在最高位的1后)
得 10100.10011=1.010010011×2410100.10011=1.010010011×24
由真值e加偏移量(32位为127,64位为1023)得阶码E
E=e+127=4+127=131=10000011E=e+127=4+127=131=10000011
S=0S=0
M=010010011M=010010011
得32位浮点数的二进制存储格式(不满32位后面要补0)
0100 0001 1010 0100 1100 0000 0000 0000=(41A4C000)16(41A4C000)16
例2(浮点数转十进制数)
754标准存储格式为(41360000)16(41360000)16的浮点数 转 十进制数
将数展开,用二进制格式表示
得,0 100 00010 011 0110 0000 0000 0000 0000
根据对应位置,得
S=0S=0
e=E−127=10000010−01111111=00000011=(3)10e=E−127=10000010−01111111=00000011=(3)10
尾数补回隐藏位1,得
1.M=1.01101100000000000000000=1.0110111.M=1.01101100000000000000000=1.011011
故十进制数为
(−1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10(−1)s×1.M×2e=+(1.011011)×23=+1011.011=(11.375)10
相关文章推荐
- IEEE754浮点格式简述 和 C语言基本数据类型转换实质
- 真正管用!warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- BCB中用FormatFloat函数控制浮点数据的输出格式
- 516C - 关于浮点与定点表示的优劣比较
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- linux printf 的数据格式表示
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- 程序的机器级表示(数据格式,操作数格式)
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- 数的定点表示和数的浮点表示
- C浮点数据格式
- 浮点数在内存中的格式(理解浮点到定点的转化)
- [DSP(TI)]DSP 数据的定标(定点DSP如何做浮点)
- C浮点数据格式[转]
- E:\demo\help4\help\help.cpp:-1: 警告:C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
- 使用自定义的facet返回千位分隔符的浮点数据格式
- “该文件包含不能在当前代码页(936)中表示的字符,请将该文件保存为 Unicode 格式以防止数据丢失”