c语言标准库提供了limits.h和float.h用于说明整数和浮点型数据的限制。
limits.h:用于检测整型数据数据类型的表达值范围。
float.h :提供了浮点型的范围和精度的宏,该头文件没有类型和函数的定义,一般用于数值分析。
可以直接使用里面定义的宏,比如下面的代码输入有符号int类型的最大值和最小值,以及float类型的最大值和最小值。
#include<stdio.h>#include <limits.h>
#include <float.h>
int main()
{
printf("int最大值:%d\t最小值:%d\n", INT_MAX, INT_MIN)
printf("float最大值:%e\t最小值%e\n",FLT_MAX,FLT_MIN)
return 0
}
-------符号位--指数位----小数部分----(指数偏移量 )单精度浮点数-1位[31]--8位 [30-23]-23位 [22-00]----(127)
一般情况下,
int在内存里以2进制补码存储,跟你想的差不多,这个就不用多说了;
float存储方式如上面所示,1位符号位,指数位8位,小数位23位,共32位即4个字节。假设小数位表示的纯小数为x,指数表示的数字为n,符号为负,则这个float数字为(-(1+x))×(2^n)。
纯小数部分用补码表示,小数位的位数与可以表示的数据范围无关,只与可以表示的有效数字有关,即表示精度有关。
指数位部分用移码表示,所以可以表示的大小是2^-127到2^128,即最大的数是2^128=3.4E38。也就是说表示范围是-3.4E-38到3.4E38。
你仔细看好了,那个float后面括号中两个数字之间并不是点,而是逗号。不是指6.1,而是指这个浮点数最大长度为6,也就是六位,然后小数部分为1位。
至于存储范围,取决于你是否定义了无符号。
无符号的话,最小是0.0 最大能存储到99999.9,如果有符号的话,范围是:-99999.9至99999.9
这样的话,你是否明白了呢?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)