成都网站建设设计

将想法与焦点和您一起共享

浮点型数据在内存中的存储-创新互联

1.数据的类型 整型类型

char

成都创新互联主要从事做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务汾阳,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

signed 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://chengdu.cdxwcx.cn/article/pdgoh.html