计算机中数的表示
2016-11-03 16:46
1776 查看
最近研究了一下计算机中数据的表示形式,其实这是大学《计算机组成原理》中的知识,无奈上课睡觉早都还给老师了。
一. 基础知识
1.源码
最高位表示符号位,其余位表示该数的绝对值;
0000 1010(b表示二进制)是10,1000 1010是-10;
0的原码:0000 0000(+0),1000 0000(-0);
一个字节的表示范围是-127~127。
2.反码
正数的反码等于其源码,负数的反码是其原码除符号位外,其余位数按位取反;
0000 1010是10,1111 0101是-10;
0的反码:0000 0000(+0),1111 1111(-0);
一个字节的表示范围是-127~127。
3.补码
正数的补码等于其源码,负数的补码是其反码+1;
0000 1010是10,1111 0110是-10;
0的补码:0000 0000(+0),0000 0000(-0)(1111 1111 + 0000 0001= 10000 0000,由于一个字节只有8位所以最前面的1丢弃);
一个字节的表示范围是-128~127(1000 0000表示~128)。
4.计算机中的数据是以补码(整数)形式表示的;
5.计算机对数据的存储方式有两种:定点和浮点;
6.字节是倒叙存储的,即低字节在左边,高字节在右边
二. 有符号和无符号整数
无符号整数:表示的数据都是非负整数,所有的比特位都表示数值。以一个字节的长度(即8个比特位)为例,它能表示的无符号整数的范围是0~255(二进制表示:00000000~11111111);
有符号整数:最高的比特位表示数据的正负(0表示正,1表示负)。以一个字节的长度(即8个比特位)为例,它能表示的有符号整数的范围是-128~127,(二进制表示:10000000~01111111)。
三. 定点数
定点数是指小数点位置是固定的,而小数点固定的位置又分为两个a:固定在最后一位比特位之后,b:固定在最高位比特位之后。
a情况表示的数是整数即定点整数,如0000 0111是7,1000 0111是-7;
b情况表示的数是纯小数,即定点小数,如1110 0000,是-0.75。
定点数的情况具体参考上一节的有符号整数。
四. 浮点数
浮点数是指小数点的位置是浮动的,它在某些情况下只能近似的表示小数,包含float和double。
IEEE754单精度浮点数格式[1]
单精度浮点数据占4个字节,4个字节的分配如下:
1)第1位为符号位,0表示正,1表示负;
2)第2~9位为阶码,采用移码表示;
3)第10~32位为尾数,采用原码表示。
将十进制小数转换为二进制(单精度)[2]
1)以10.625为例说明,先转换整数部分10 = 1010;
2)转换小数部分0.625 = 0.101,于是10.625 = 1010.101;
3)将1010.101表示为±a*(2^e)的形式,其中±是符号,a是尾数,e是指数。1010.101=1.010101*(2^3),显而易见,最高位永远是1,所以我们没有必要保留它,这样尾数的二进制就变成了:010101*(2^3),注意前面是有小数点的,但是既然一定有小数点,那这个小数点也是没有必要保存的;
4)第10~32位表示尾数a,本例中a补零后变为:010 1010 0000 0000 0000 0000;第2~9位为阶码,表示指数e,范围~128-127,该位置处的实际值是e+127,如果e超过127,则从~128开始计算(此即为移码表示),本例中该位置的值为3+127=130(1000 0010);第1位为符号位,本例为1;
5)10.625的二进制(单精度)表示形式为0100 0001 0010 1010 0000 0000 0000 0000,由于计算机中字节是倒叙存储的,所以在内存中的表示形式为0000 0000 0000 0000 0010 1010 0100 0001(16进制表示为00 00 2a 41),如图一所示。
图1
注意这个例子的特殊性:它的小数部分正好可以用有限长度的2进制小数表示,因此,而且整个有效数字部分a的总长度小于23,因此它精确的表示了10.625,但是有的情况下,有效数字部分的长度可能超过23,甚至是无限多的,那时候就只好把后面的位数截掉了,那样表示的结果就只是一个近似值而非精确值;显然,存储长度越长,精度就越高。比如双精度浮点数,1位符号位,11位指数位,52位有效数字。
五. Reference
[1] http://blog.csdn.net/solomon1558/article/details/40798901
[2] http://blog.csdn.net/woaixiaozhe/article/details/7429683
一. 基础知识
1.源码
最高位表示符号位,其余位表示该数的绝对值;
0000 1010(b表示二进制)是10,1000 1010是-10;
0的原码:0000 0000(+0),1000 0000(-0);
一个字节的表示范围是-127~127。
2.反码
正数的反码等于其源码,负数的反码是其原码除符号位外,其余位数按位取反;
0000 1010是10,1111 0101是-10;
0的反码:0000 0000(+0),1111 1111(-0);
一个字节的表示范围是-127~127。
3.补码
正数的补码等于其源码,负数的补码是其反码+1;
0000 1010是10,1111 0110是-10;
0的补码:0000 0000(+0),0000 0000(-0)(1111 1111 + 0000 0001= 10000 0000,由于一个字节只有8位所以最前面的1丢弃);
一个字节的表示范围是-128~127(1000 0000表示~128)。
4.计算机中的数据是以补码(整数)形式表示的;
5.计算机对数据的存储方式有两种:定点和浮点;
6.字节是倒叙存储的,即低字节在左边,高字节在右边
二. 有符号和无符号整数
无符号整数:表示的数据都是非负整数,所有的比特位都表示数值。以一个字节的长度(即8个比特位)为例,它能表示的无符号整数的范围是0~255(二进制表示:00000000~11111111);
有符号整数:最高的比特位表示数据的正负(0表示正,1表示负)。以一个字节的长度(即8个比特位)为例,它能表示的有符号整数的范围是-128~127,(二进制表示:10000000~01111111)。
三. 定点数
定点数是指小数点位置是固定的,而小数点固定的位置又分为两个a:固定在最后一位比特位之后,b:固定在最高位比特位之后。
a情况表示的数是整数即定点整数,如0000 0111是7,1000 0111是-7;
b情况表示的数是纯小数,即定点小数,如1110 0000,是-0.75。
定点数的情况具体参考上一节的有符号整数。
四. 浮点数
浮点数是指小数点的位置是浮动的,它在某些情况下只能近似的表示小数,包含float和double。
IEEE754单精度浮点数格式[1]
单精度浮点数据占4个字节,4个字节的分配如下:
1)第1位为符号位,0表示正,1表示负;
2)第2~9位为阶码,采用移码表示;
3)第10~32位为尾数,采用原码表示。
将十进制小数转换为二进制(单精度)[2]
1)以10.625为例说明,先转换整数部分10 = 1010;
2)转换小数部分0.625 = 0.101,于是10.625 = 1010.101;
3)将1010.101表示为±a*(2^e)的形式,其中±是符号,a是尾数,e是指数。1010.101=1.010101*(2^3),显而易见,最高位永远是1,所以我们没有必要保留它,这样尾数的二进制就变成了:010101*(2^3),注意前面是有小数点的,但是既然一定有小数点,那这个小数点也是没有必要保存的;
4)第10~32位表示尾数a,本例中a补零后变为:010 1010 0000 0000 0000 0000;第2~9位为阶码,表示指数e,范围~128-127,该位置处的实际值是e+127,如果e超过127,则从~128开始计算(此即为移码表示),本例中该位置的值为3+127=130(1000 0010);第1位为符号位,本例为1;
5)10.625的二进制(单精度)表示形式为0100 0001 0010 1010 0000 0000 0000 0000,由于计算机中字节是倒叙存储的,所以在内存中的表示形式为0000 0000 0000 0000 0010 1010 0100 0001(16进制表示为00 00 2a 41),如图一所示。
图1
注意这个例子的特殊性:它的小数部分正好可以用有限长度的2进制小数表示,因此,而且整个有效数字部分a的总长度小于23,因此它精确的表示了10.625,但是有的情况下,有效数字部分的长度可能超过23,甚至是无限多的,那时候就只好把后面的位数截掉了,那样表示的结果就只是一个近似值而非精确值;显然,存储长度越长,精度就越高。比如双精度浮点数,1位符号位,11位指数位,52位有效数字。
五. Reference
[1] http://blog.csdn.net/solomon1558/article/details/40798901
[2] http://blog.csdn.net/woaixiaozhe/article/details/7429683
相关文章推荐
- 什么是原码反码补码 计算机中负数的表示
- 负数在计算机中的表示
- 浅谈C++中Char、int和flaot在计算机中的表示
- 汉字在计算机中的表示
- sql server中单引号拼接字符串(书写错误会出现错误"浮点值 XXXX 超出了计算机表示范围(8 个字节)。“XX”附近有语法错误。")
- 计算机整数的表示
- 计算机的运行基础数制表示与转换
- 计算机上色彩如何表示
- float型数在计算机中的表示
- 计算机中数的表示与存储
- 负数在计算机中的表示方法
- 计算机系统巡回赛的深入理解(三)机器级表示计划
- 为什么计算机中使用补码来表示与运算
- 计算机中负数表示法
- 深入理解计算机系统 第二章 表示和操作信息
- 计算机浮点数规格化表示
- 【深入理解计算机系统】【IEEE754中特殊数的表示】
- 计算机中数的表示
- 深入理解计算机系统--第二章(信息的表示和处理)
- 数据在计算机中的表示方法