当前位置:首页 » 存储配置 » double内存存储

double内存存储

发布时间: 2022-09-26 05:57:44

‘壹’ c语言中float和double的区别!

区别:

1、精度不一样,float是单精度,double是双精度;

2、表示小数的范围不一样,double能表示的范围比float大;

3、double在内存中,占8个字节,float在内存中,占4个字节。

float:浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 二进制指数和一个 23 位尾数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -3.4E+38 ~ 3.4E+38 之间的范围。

double:双精度浮点型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是double float数据类型,C/C++中表示实型变量的一种变量类型。

(1)double内存存储扩展阅读:

浮点型数据

1、float型

编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。

2、double型

为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字。

3、long double型

不同的编译系统对long double型的处理方法不同,Visual C++6.0对long double型和double一样处理,分配8个字节。

网络-float

网络-double

‘贰’ C语言中float,double等类型,在内存中的结构

从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更

高的精度。

任何数据在内存中都是以二进制(0或1)顺序存储的,每一个1或0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2

字节)的short int型变量的值是1000,那么它的二进制表达就是:00000011 11101000。由于Intel CPU的架构原因,它是按字节倒

序存储的,那么就因该是这样:11101000 00000011,这就是定点数1000在内存中的结构。

目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和

尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:

````````符号位 阶码 尾数 长度
float 1 8 23 32
double 1 11 52 64
临时数 1 15 64 80

由于通常C编译器默认浮点数是double型的,下面以double为例:
共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:
最高位63位是符号位,1表示该数为负,0正;
62-52位,一共11位是指数位;
51-0位,一共52位是尾数位。

按照IEEE浮点数表示法,下面将把double型浮点数38414.4转换为十六进制代码。
把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理:
0.4=0.5*0+0.25*1+0.125*1+0.0625*0+……
实际上这永远算不完!这就是着名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了(隐藏位技术:最高位的1

不写入内存)。
如果你够耐心,手工算到53位那么因该是:38414.4(10)=1001011000001110.(2)
科学记数法为:1.001……乘以2的15次方。指数为15!
于是来看阶码,一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为负,为了便于计算,规定都先加上1023,在这里,

15+1023=1038。二进制表示为:100 00001110
符号位:正—— 0 !
合在一起(尾数二进制最高位的1不要):
01000000 11100010 11000001 11001101 01010101 01010101 01010101 01010101
按字节倒序存储的十六进制数就是:
55 55 55 55 CD C1 E2 40

‘叁’ c语言中double和float它们存储时分别占据多大的内存空间

double 中文译为双精度浮点数,一般称双精度数,它在内存中占用8个字节(位、bit)的空间;float 中文译为单精度浮点数,一般就称为浮点数,它在内存中占用4个字节的空间。

‘肆’ double型数据在内存中是怎么存储的

表示分配的内存的存储数据的类型!这决定了分配内存的实际大小!因为不同类型的数据在内存中所占据的空间是不同的!

‘伍’ double类型的数据是怎样分配到内存中的呢

立刻动手写一小段测试代码就知道了:
int main(int argc, char ** argv)
{
int i;
double x = 123456789.123456789;
unsigned char* ptr = (unsigned char*)&x;
for(i=0; i<sizeof(x); i++)
printf("%02X ", ptr[i] );

printf("\n");

int y = 0x1234;
ptr = (unsigned char*)&y;
for(i=0; i<sizeof(y); i++)
printf("%02X ", ptr[i] );

printf("\n");

return 0;
}

我的系统(X86CPU, RedHat FC,G++编译器)输出的结果是:
75 6B 7E 54 34 6F 9D 41
34 12 00 00

容易看得出来,整数0x1234使用4字节(0x34 0x12 0x00 0x00)内存表示,但是double的8字节就很难一眼看明白了。

为什么呢?因为浮点数在计算机中不像整数那样简单的使用数值表示,它使用的是科学计数法,通常由正负符号、数字、幂3部分组成,因此它可以表示很大数或者很小的数,但其精度是有限的,比如float只有6位数字的精度,而double一般也只有10位数字精度。

至于一个在内存中占8字节64位的浮点数,哪几位表示数字,哪几位表示幂,完全取决于编译器的实现,很可能MS VC的结果就和上面的不同。

指针和内存一直都是C或者C++较难的地方,因为这部分内容和计算机体系以及编译器的实现都有关系,就拿上面最简单的整数0x1234来说,在其他体系的计算机中,很可能是以0x00 0x00 0x12 0x34来表示的(在socket通信中经常碰到这种情况,楼主如果好奇可以按关键字"网络字节序"搜搜)

‘陆’ c语言中double和float它们存储时分别占据多大的内存空间

double
中文译为双精度浮点数,一般称双精度数,它在内存中占用8个字节(位、bit)的空间;float
中文译为单精度浮点数,一般就称为浮点数,它在内存中占用4个字节的空间。

‘柒’ C语言中DOUBLE型数据储存结果

float与double类型的内存分布,精度和范围
内存分布:
C/c++的浮点数据类型有float和double两种。
float大小为4字节,内存中的存储方式如下:
符号位(1bit)指数(8bit)尾数(23bit)
double大小为8字节,内存中的存储方式如下:
符号位(1bit)指数(11bit)尾数(52bit)
符号位决定浮点数的正负,0正1负。指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1)。
由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准,指数用移码表示。0的float类型移码为127(0111 1111),0的double类型移码为1023(011 1111 1111)。运算时,在0 的移码基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。
所以float和 double类型分别表示的2.5如下(二进制):
符号位 指数 尾数

0 1000 0000 010 0000 0000 0000 0000 0000

0 100 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
精度:
float和double的精度是由尾数的位数来决定的。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字; double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
范围:
float类的指数是8位移码,最大为127最小为-127,127用来作2的指数,为2^127,约等于 1.7014*10^38, 而我们知道,floa示数范围约为- 3.4*10^38-------3.4*10^38, 这是因为尾数都为1时,即1.11..11约为2,因此浮点数的范围就出来了.double的情况与float完全相似.

‘捌’ 能不能给我讲讲C语言中实数的二进制形式,是怎样存储的

1、float类型数字在计算机中用4个字节(32位)存储。

遵循IEEE-754格式标准:
一个浮点数由3部分组成:符号位s(1位)和、指数e(8位)、底数m(23位)

2、格式
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

S:符号位
E:指数,十进制指数加上127后的值得二进制数据
M:底数

3、符号位

指底数的符号,可正可负。

4、指数

占用8bit的二进制数,可表示数值范围为0-255。

但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。

所以,float类型的指数可从-126到128

5、底数

实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
科学计数法。

再举一例:
17.625在内存中的存储

首先要把17.625换算成二进制:10001.101

在将10001.101右移,直到小数点前只剩1位:
1.0001101 * 2^4 因为右移动了四位

底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号:整数,所以是0


综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000

‘玖’ c语言中double型数据在内存中 占多少个字节来存储

c语言中double(双精度浮点型)是计算机使用的一种数据类型。double(双精度浮点型)使用 64 位(8字节) 来储存一个浮点数。 它可以表示十进制的15或16位有效数字,其数值范围为-1.79769313486232E308 到1.79769313486232E308。

(9)double内存存储扩展阅读:

double(双精度浮点型)数值可转换到其他类型的整数或浮点数,反之亦然。double(双精度浮点型)常量的最后一个字符可加上“d”或“D”。其存储格式与浮点型类似,最高位为符号位,次高11位为指数位,其次52位为尾数。

double(双精度浮点型)同数值型比,它能提供更高的数值精度,采用固定存储长度的浮点数形式,与数值型数据不同,它的小数点位置是由输入的数据值来决定的,并且只能用于表中的字段。

‘拾’ C语言中DOUBLE型数据储存结果

float与double类型的内存分布,精度和范围
内存分布:
C/c++的浮点数据类型有float和double两种。
float大小为4字节,内存中的存储方式如下:
符号位(1bit)指数(8bit)尾数(23bit)
double大小为8字节,内存中的存储方式如下:
符号位(1bit)指数(11bit)尾数(52bit)
符号位决定浮点数的正负,0正1负。指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1)。
由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准,指数用移码表示。0的float类型移码为127(0111
1111),0的double类型移码为1023(011
1111
1111)。运算时,在0
的移码基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。
所以float和
double类型分别表示的2.5如下(二进制):
符号位
指数
尾数
0
1000
0000
010
0000
0000
0000
0000
0000
0
100
0000
0000
0100
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
精度:
float和double的精度是由尾数的位数来决定的。
float:2^23
=
8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52
=
4503599627370496,一共16位,同理,double的精度为15~16位。
范围:
float类的指数是8位移码,最大为127最小为-127,127用来作2的指数,为2^127,约等于
1.7014*10^38,
而我们知道,floa示数范围约为-
3.4*10^38-------3.4*10^38,
这是因为尾数都为1时,即1.11..11约为2,因此浮点数的范围就出来了.double的情况与float完全相似.

热点内容
玩和平精英的时候服务器发呆了怎么办 发布:2025-04-05 11:02:40 浏览:376
怎么把苹果的号转到安卓手机上 发布:2025-04-05 10:39:05 浏览:531
存储核心架构瓶颈已被攻破 发布:2025-04-05 10:38:27 浏览:306
空间新算法 发布:2025-04-05 10:33:21 浏览:706
蜀门和远征哪个配置低 发布:2025-04-05 10:23:50 浏览:285
linux下jdk的安装 发布:2025-04-05 10:12:20 浏览:68
单机江湖脚本 发布:2025-04-05 10:08:32 浏览:766
爱奇艺离线缓存怎么传蓝牙 发布:2025-04-05 10:00:48 浏览:142
阿里云服务器内存超频 发布:2025-04-05 10:00:48 浏览:576
如何登录pubg国际服安卓手机 发布:2025-04-05 09:40:07 浏览:413