32位系统与64位系统各数据类型所占空间大小

 不同系统下各数据类型大小
数据类型32位字节数64位字节数数据值范围
bool(布尔型)11ture(非0),false(0)
char(字符型)11-128~127
unsigned char110~255
short(短整型)22-32768~32767
unsigned short220~65535
int(整形)44-2^31 ~ 2^31
unsigned int440~2^32-1
long(长整型)48
unsigned long48
long long(长整型)88-2^64~2^64-1

        float

(单精度浮点数)

44

-2^128~2^128

(精度为6~7位有效数字)

        double

(双精度浮点数)

88

-2^1024~2^1024

(精度为15~16位有效数字)

long double

(扩展精度浮点数)

88

-2^1024~2^1024

(精度为15~16位)

*48

关于数据存储常见的问题:

(1)int 和long的区别:

因为早期的操作系统大多是16位的,所以C语言设计者就规定了“整型”和“长整型”两种数据类型。

在16位系统中int所占字节大小为2字节,而long用4字节表示。

而32位系统中,依照标准:长整型至少和整型一样长,整型至少和短整型一样长。没有规定long一定要比int长,也没有规定short要比int短,所以int 用4字节表示,long也是4字节。

目前的操作系统已发展到64位操作系统,但因程序编译工艺的不同,两者表现出不同的差别:所以int型依旧是4字节,long int变成了八字节。

(2)long long int 型

long long在win32中是确实存在,长度为8个字节;定义为LONG64。但long long 是C99标准中新增的类型关键字,老版本的编译器比如vc6.0就无法识别此类型,编译会报错。

另外,32位系统中longlong类型的数值转换成其他类型数据时,会因为数据本身所占空间大小不同,发生截断(例:在32位下,long类型只保留4个字节,而long long 有8个字节,long long转换成long类型时会缩短long long类型的数值的长度,导致数据不正确)。

(3)float与double的范围和精度

1).范围
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:
1bit(符号位) 11bits(指数位) 52bits(尾数位)
于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

2).精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南归南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值