c语言整型与浮点型数据存取的范围

c语言整型与浮点型数据存取的范围

整型数据:

1.long int 的由来
在win32及现在现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。
所以: short<=int<=long

测试类型数据的字节数函数:sizeof(类型名称)

printf("%d",sizeof(int));

这里列举在win64下的类型字节数及取值范围

类型名称字节数取值范围
short (short int)2(-2 ^15)~ (2^15-1)-32768~+32767
unsigned short20~65535
int4(-2 ^31)~ (2^31-1)-2147483648~ +2147483647
unsigned int40~4294967295
long (long int)4(-2 ^31)~ (2^31-1) -2147483648~+2141483647
unsigned long40~4294967295
long long (long long long int)8(-2 ^63)~ (2^63-1)-9223372036854775808~+9223372036854775807
unsigned long long80~18446744073709551615

浮点型数据:

取值范围(看指数部分):
float的指数部分有 8bit (2^8),由于是有符号型,所以得到对应的指数范围-128~128。
取值范围为:
(-2 ^128)~ (2^128),约等于-3.4E38 ~ +3.4E38 ;
double的指数部分有 11bit(2^11) , 对应的指数范围-1024~1024。
取值范围为:
(-2 ^1024)~ (2^1024),约 等于-1.797E308 ~ +1.797E308;

精度( 有效数字)(主要看尾数位):
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位;
double的尾数位是52bit,对应15~16位十进制数,有效数字位15位或16位。

类型名称指数位尾数位取值范围有效数字
float823(-2 ^128)~ (2^128) 约等于-3.4E38 ~ +3.4E387 或 8位
double1152(-2 ^1024)~ (2^1024) 约等于-1.797E308 ~ +1.797E30815 或 16位

double的存取的错误认知
double类型可以存307位(实际是308,但存的最大的最高位为1,所以基本默认这里就讲307),
但当用.f 输出double时, 它的精度在前16位,他只能保证前16位的精度,后面的就无法保证,因为一旦超过精度范围,就不能精确的描述该数据,不同的处理器对不能精确描述的部分的处理机制可能是不同的,这也就导致了在不同的平台上为什么一套代码的运行结果会不一致

注意:
printf()用%f输出double型,而scanf却用%lf
严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。
要确保可移植性,就要坚持使用%f

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值