浮点型数据在内存中的存储-创新互联
char
成都创新互联主要从事做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务汾阳,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575signed char
unsigned char
short
unsigned short [int]
signed short [int]
int
signed int
unsigned int
long
signed long [int]
unsigned long [int]
long long
signed long long [int]
unsigned long long [int]
[ ]表示可以省略
浮点数类型float
double
构造类型数组类型
结构体类型
枚举类型
联合类型
指针类型int*
float*
char*
void*
空类型void
常用于函数返回类型、函数参数、指针类型
2.数据的存储 大小端字节序存储模式(小同大异) 什么是大端小端大端存储:数据的低位储存在内存的高地址中,数据的高位储存在内存的低地址中
小端存储:数据的低位储存在内存的低地址中,数据的高位储存在内存的高地址中
为什么要有大小端在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
例如:int a = 0x11223344
小端存储:11是高位,存储在高地址,44是低位,存储在低地址;大端存储相反。
如何判断大小端可以编写程序测试:
#includeint main()
{
int a = 1;
//a = 0x 00 00 00 01
if (*(char*)&a == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
整型在内存中的存储计算机中整数的表示方法有三种:原码、反码、补码。
整数在内存中都是以补码的形式存储的。
因为这次测试的环境是小端存储,所以顺序不一样。
浮点型在内存中的存储对于任何一个二进制浮点数都可以写成一种形式:(-1)^S*M*2^E,所以计算机只要将SME存储起来就可以了。
例如:
5(101)可以写成 (-1)^0*1.01*2^2
9(1001)可以写成 (-1)^0*1.001*2^3
那么在计算机中是如何存储的呢?
对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位为有效数字M。
对于64位的浮点数,最高一位是符号位S,接着的11位是指数E,剩下的23位是有效数字M。
对于M的规定:M是一个大于1小于2的数,也就是说可以写成1.xxxxxxxx的形式,1可以省略,所以在存储时M只需要将小数位存起来就可以了。这样一来,32(64)位浮点数可以精确到24(53)位有效数字。
对于E的规定:E是一个无符号整型数字,但是我们知道指数位可能出现负数,对于32(64)位浮点数,E只能表示0~255(0~2047)之间的数,所以规定,E在存储时要在真实值的基础上加上127(1023)。比如,2^10,E的真实值是10,在存储时+127(+1023)变为137(1033)。
E从内存中取出分三种情况:
1:E不全为0也不全为1
浮点数的E的真实值可以直接减去127(1023)即可得到
2:E为全0
E的真实值为1-127(1-1023),说明这是一个非常小的浮点数,这时M小数点前的1写成0,这样做是为了表示这个数是一个很接近于0的数。
3:E为全1
这时,如果M全为0,就表示+-无穷(+-通过S判断)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
新闻名称:浮点型数据在内存中的存储-创新互联
标题来源:http://azwzsj.com/article/pdgoh.html