浮点型在内存的存储方式与整型不一样

浮点型只能近似的表示某个实数
   
   浮点型在内存的存储方式与整型不一样
   
   float:3.25   32位
   符号位:1位  0  s
   指数位:8位   1000 0010  E
   小数位:23位        000 0100 0000 0000 0000 0000 M
   
   
   (-1)^s*2^(E-127)*1.M   E:0-254
   
   8 * 1.03125 = 8.25
   
   由此就证明了:浮点型数据在内存中与整型存放的方式不一样
   导致的结果:浮点型数据不能准确的表示某个实数,只能近似表示
   笔试题:
   有一个float类型的a,写代码判断a和0是否相等?
   if(0 == a)  error-->a只能近似等于0
   if(a >= -e-6 && a <= e-6)
   {
        printf("a == 0\n");
   }
      
   精度范围:6-7位
   double:64位
   符号位:1位
   指数位:11位
   小数位:52位
   精度范围:15-16位

参考链接

三、正浮点型

浮点型中有两种,一种是4Byte的float型,一种是8Byte的double型,这两种计算方式都一致,只是有点点区别
1、float型
float型是遵循IEEE R32.24规范,即1位符号位、8位阶码、23位尾数
具体计算方式是先用科学计数法表示出该数的二进制,然后计算出阶码值,最后把尾数 补足23位,依此存储
比如125.5这个数
先看整数部分,125表示成二进制是1111101,(整数转换二进制是除二取余)
再看小数部分,0.5表示成二进制是0.1,(小数转换二进制是乘二取整)
所以125.5用二进制表示就是1111101.1,转换成科学计数法就是1.1111011 x 2^6(阶数为6)
但是这里的阶码是用移码的形式表示,float型的偏置量是127,于是6+127=133,即10000101
这里前面的9位就出来了,因为是正数,所以符号位为0,阶码为10000101
后面的尾数就是1111011,在后面补0,凑齐23位,即 1111011 00000000 00000000(因为科学计数法的整数部分总是为1,所以,这个1不用存储)
所以125.5的存储方式为 0 10000101 11110110000000000000000
即: 01000010 11111011 00000000 00000000
2、double型
double型跟float型计算方式类似,不过区别在于double型遵循IEEE R64.53规范
a、double的符号位是1位,阶码为11位,尾数为52位
b、double的偏置量是1023,而float是127
四、负浮点型
和上面一样,不过就是符号位用1表示,就这点小区别
 

浮点型数据在内存中的存储方式是按照IEEE 754标准进行存储的。IEEE 754标准规定了两种浮点数的表示方法:单精度浮点数和双精度浮点数。其中,单精度浮点数占用4个字节,双精度浮点数占用8个字节。 在IEEE 754标准中,浮点数存储格式由三部分组成:符号位、指数位和尾数位。其中,符号位用来表示浮点数的正负,指数位用来表示浮点数的数量级,尾数位用来表示浮点数的精度。 具体来说,单精度浮点数存储格式如下所示: | 31 | 30 - 23 | 22 - 0 | |----|---------|--------| | S | E | M | 其中,S表示符号位,占用1个bit;E表示指数位,占用8个bit;M表示尾数位,占用23个bit。双精度浮点数存储格式类似,只是指数位和尾数位的长度不同。 在计算机中,浮点数存储方式是按照二进制补码进行存储的。具体来说,符号位用0表示正数,用1表示负数;指数位和尾数位都用二进制补码表示。 举个例子,如果要将3.14这个单精度浮点数存储到计算机中,首先需要将3.14转换成二进制数。具体来说,可以使用以下方法进行转换: 3.14 = 11.0010001111...(二进制) 然后,根据IEEE 754标准的规定,将上述二进制数按照符号位、指数位和尾数位的顺序存储到计算机中。具体来说,可以将上述二进制数转换成以下形式: | 0 | 10000000 | 10001100100011110101110 | |---|----------|------------------------| | S | E | M | 其中,符号位S为0,表示正数;指数位E为10000000,表示指数为128(因为E需要加上一个固定的偏移量127,才能表示实际的指数值);尾数位M为10001100100011110101110,表示尾数为1.5707964(因为M需要除以2的23次方,才能表示实际的尾数值)。 因此,3.14这个单精度浮点数在计算机中的存储方式为: 01000000000100110010001111010111
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值