C语言-浮点类型

一、类型说明

  浮点型变量,也称为实型变量,用来存储小数数值的。

浮点型变量分为三种:单精度浮点型(float)、双精度浮点型(double)、长双精度浮点型(long double)。

类型占用空间取值范围
float4个字节 (=32位) − 1.4 ∗ 1 0 − 45 -1.4*10^{-45} 1.41045 ~ − 3.4 ∗ 1 0 + 38 -3.4*10^{+38} 3.410+38 1.4 ∗ 1 0 − 45 1.4*10^{-45} 1.41045 ~ 3.4 ∗ 1 0 + 38 3.4*10^{+38} 3.410+38
double8个字节 (=64位) − 4.9 ∗ 1 0 − 324 -4.9*10^{-324} 4.910324 ~ − 1.7 ∗ 1 0 + 308 -1.7*10^{+308} 1.710+308 4.9 ∗ 1 0 − 324 4.9*10^{-324} 4.910324 ~ 1.7 ∗ 1 0 + 308 1.7*10^{+308} 1.710+308
long double12个字节(=96位)太大了…

  其中,

类型16位编译器32位编译器64位编译器
float4字节4字节4字节
double8字节8字节8字节

float表示数据的范围要大于long类型表示的范围
浮点型变量不能使用signed或unsigned修饰符
最常用的浮点类型为:double 类型,因为精度比float高。
浮点型常量,默认为 double 类型d2=d1+2.3; // 2.3是double类型

二、后缀

float:在小数后面添加后缀 fF
double:因为默认就是double类型的,无需后缀
long double:在小数后面添加后缀 lL

三、实例

1.定义一个float型

  两种写法一样

float f = 1.23f;
float f = 1.23F;

2.科学计数法

  使用科学计数法表示浮点数,使用字母 e或E 来分隔小数部分和指数部分。

注意,e 的前后,不能存在空格。

  这四种写法是一样的

double x = 123.456e+3; // 123456.000000
double x = 123.456E+3;

double x = 123.456e3;
double x = 123.456E3;

  小数部分如果是 0.x 或 x.0 的形式,那么 0 可以省略

0.3E6 // 300000
.3E6
3.0E6 // 3000000
3.E6

3.练习题

需求:有人用温度计测量出用华氏法表示的温度(如64°F),今要求把它转换为以摄氏法表示的温度(如17.8℃)。转换的公式为: c = 5 9 ( f − 32 ) c = \frac{5}{9}(f - 32) c=95(f32)

#include <stdio.h>

int main() {
    float f, c; //定义f和c分别表示华氏温度、摄氏温度
    f = 64.0; //指定f的值
    c = (5.0 / 9) * (f - 32); //利用公式计算c的值
    printf("f=%f\nc=%f\n", f, c); //输出c的值
    return 0;
}

注意细节:5 / 9结果为 0,但是5.0 / 9结果可不是 0

四、存储规则

  这里我们来解释一下凭什么float(4个字节)表示数据的范围要大于long类型(8个字节)表示的范围

任何有小数点的数值,都会被编译器解释为浮点数。所谓“浮点数”就是使用 m * b^e 的形式,存储一个数值, m 是小数部分, b 是基数, e 是指数部分。

1.从十进制角度:

在这里插入图片描述

2.从二进制角度

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: ( − 1 ) S ∗ M ∗ 2 E (-1)^S * M * 2^E (1)SM2E
其中:

  • ( − 1 ) s (-1)^s (1)s表示符号位,当s=0,V为正数;当s=1,V为负数
  • M表示有效数字,大于等于1,小于2
  • 2 E 2^E 2E表示指数位。

例如:十进制的5.0,写成二进制是 101.0 ,相当于 1.01× 2 2 2^2 22 。即,按照上面V的格式,可以得出s=0,M=1.01,E=2。十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01× 2 2 2^2 22 。即,s=1,M=1.01,E=2。

3.IEEE 754(二进制)

Ⅰ.32位

  最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

在这里插入图片描述

Ⅱ.64位

  最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

在这里插入图片描述

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值