C/C++的浮点数据类型有float和double两种。
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1 bit) 指数(8 bit)尾数(23 bit)
类型double大小为8字节,即64位,内存布局如下:
符号位(1 bit)指数(11 bit) 尾数(52 bit)
符号位决定浮点数的正负,0正1负。
指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制01111111),double类型指数的起始数为1023(二进制011 11111111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):
符号位 指数 尾数
0 1000 0000 010 00000000 0000 0000 0000
0 100 0000 0000 01000000 0000 0000 0000 0000 0000
0000 0000 0000 00000000 0000
浮点数2.5可以用二进制小数准确表示(2.5=1*(2^1)+0*(2^0)+1*(2^-1)),但很多小数不可以准确表示,其二进制形式的小数部分会无限循环,如浮点数-1.2表示如下(二进制):
符号位 指数 尾数
1 0111 1111 0011 00110011 0011 0011 010
1 011 1111 1111 00110011 0011 0011 0011 0011 0011
0011 0011 0011 00110011 0011
由于对无限循环尾数的截取遵循0舍1入,尾数的第21~24位为0011,第53~56位为0011,而float尾数容量为23位,double尾数容量为52位,所以,float形式的最后三位因进位而成010,double形式则没有进位发生。
类型float和double通过==,>,<等比较不会引起编译错误,但是非常可能得到错误的结果。这是因为它们的内存分布不同,不可以直接比较。正确的方法是转换为同一类型后比较两者差值,如果结果小于规定的小值,则视为相等
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/vinsendai/archive/2008/06/27/2593035.aspx
分享到:
相关推荐
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,...
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,...
在任何编程语言中,无论是基本类型还是引用类型,不论其作用域如何,都必须为其分配一定的内存空间,Java 语言也不例外,Java 的数据类型可以分为两种:基本类型(变量持有数据本身的值)和引用类型(是某个对象...
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,...
4.1.3 double类型 4.1.4 char类型 4.1.5 限定词:long、long long、short、unsigned及signed 4.1.6 id类型 4.2 算术表达式 4.2.1 运算符的优先级 4.2.2 整数运算和一元负号运算符 4.2.3 模运算符 4.2.4 整型值和浮点...
值类型的变量在声明后,系统直接在托管栈中为其分配内存并保存其数据,其中值类型包括:byte,short,int,long,float,double,decimal,char,bool 和 struct等,当我们声明一个引用类型时,系统并不会立刻在托管...
25 对于double型变量,内存分配_______个字节 26结构化程序设计的基本数据类型包括_______、逻辑类型、整数类型、字符类型 27 Java使用____________字符集 28 混合运算中不同类型的数据先转化为同一类型,然后运算,...
4 实型(单精度浮点型以float表示 `双精度浮点型以double表示) long可以用来修饰int(表示长整型)和double 5 signed(有符号) 和 unsigned(无符号)⊥可以用来修饰char型和int型(包括long int) ⊥ ⊥ 6 有符号 ...
数据类型可以理解为固定内存大小的别名,数据类型是创建变量的模子。 char 1字节 short 2字节 int 4字节 long 4字节 float 4字节 double 8字节 变量是一段实际连续存储空间的别名,通过变量的名字可以使用存储...
(1)基本类型 byte short int long float double char boolean (2)引用类型 类 数组 接口 枚举 注解 变量:内存中的一块存储空间, 存储的就是常量。 特点:一个变量只能存储一个数据,不能存储多个。 需求:...
其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围...
基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int...
事实上,能够确保的只有如下几点: …… 目录第1章 声明和初始化 第2章 结构、联合和枚举第3章 表达式第4章 指针第5章 空指针第6章 数组和指针第7章 内存分配 第8章 字符和字符串 第9章 布尔表达式和...
基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 ...
12.4.2 BINARY_FLOAT/BINARY_DOUBLE类型的语法和用法 513 12.4.3 非固有数值类型 513 12.4.4 性能考虑 514 12.5 LONG类型 515 12.5.1 LONG和LONG RAW类型的限制 516 12.5.2 处理遗留的LONG类型 517 12.6 DATE...
数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间。 ②java中的数据类型: 基本数据类型 引用数据类型【后面讲】 * 类 * 接口 * 数组 * … ③基本数据类型 基本数据类型包括四大类八小种: ...
然后又使用一些内存分配技巧使 namestr 数组用起来好像有多个元素。这样合法和可移植吗? o 3.7 是否有自动比较结构的方法? o 3.8 如何向接受结构参数的函数传入常数值? o 3.9 怎样从/向数据文件读/写结构? ...