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

清疚 2022-02-20 07:57 464阅读 0赞

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

整型数据:

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

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

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

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



















































类型名称 字节数 取值范围
short (short int) 2 (-2 ^15)~ (2^15-1)-32768~+32767
unsigned short 2 0~65535
int 4 (-2 ^31)~ (2^31-1)-2147483648~ +2147483647
unsigned int 4 0~4294967295
long (long int) 4 (-2 ^31)~ (2^31-1) -2147483648~+2141483647
unsigned long 4 0~4294967295
long long (long long long int) 8 (-2 ^63)~ (2^63-1)-9223372036854775808~+9223372036854775807
unsigned long long 8 0~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位。



























类型名称 指数位 尾数位 取值范围 有效数字
float 8 23 (-2 ^128)~ (2^128) 约等于-3.4E38 ~ +3.4E38 7 或 8位
double 11 52 (-2 ^1024)~ (2^1024) 约等于-1.797E308 ~ +1.797E308 15 或 16位

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

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

发表评论

表情:
评论列表 (有 0 条评论,464人围观)

还没有评论,来说两句吧...

相关阅读