【C语言】浮点型的存储方式

目录

一、浮点型和整型存储方式一样吗?

二、浮点型的存储规则

2.1  S,M,E求法

2.2 如何存放S,M,E 

2.2.1 IEEE 754规定

2.2.2 特别的规定

2.2.3  验证

2.3 取出规则

2.3.1 E不全为0或不全为1

2.3.2 E为全0

2.3.3 E为全1

2.3.4验证

END.


一、浮点型和整型存储方式一样吗?

尝试着做一下,看答案是否和你想得相同,如果不一样,那你算是找对文章了。

答案1:是以整型的方式存储,以整型的方式取出

答案2:是以整型的方式存储,以浮点型的方式取出

答案3:是以浮点型的方式存储,以整型的方式取出

答案4:是以浮点型的方式存储,以浮点型的方式取出

由此我们可以得知,整型的存储方式和浮点型的存储方式是不一样的

二、浮点型的存储规则

2.1  S,M,E求法

根据国际标准IEEE 754,任何一个二进制的浮点数都能表示为以下方式

 (-1)^S*M*2^E

浮点数为正数时S=0,反之S=1

M表示有效数字,在1~2之间(二进制)

2^E表示指数位

用一个实例来帮助大家理解

写出5.5对应的式子

5.5的二进制:101.1(小数点右边是从2的-1次方开始)

S=0(5.5为正数)

E=2(转换成科学计数法:1.011小数点左移两位)

M=1.011

既然浮点型可以用SEM来表示,那我们存放这三个值是不是就间接的把数据存在内存中了

所以在内存中存放浮点型就是在存放SME

2.2 如何存放S,M,E 

2.2.1 IEEE 754规定

<

<think>好的,我现在需要回答用户关于C语言浮点型数据类型的问题。用户明确问到了“包括哪些”,所以我首先要列出主要的浮点型数据类型。根据提供的引用内容,可以看到C语言中的浮点型主要有float、double,可能还有long double,但引用里没有详细提到long double,不过根据常识,我应该确认是否要包含它。 首先,引用[1]提到float和double,分别占4字节和8字节,有效数字位数不同。引用[3]中也提到了float和double在不同编译器中的大小,还提到了long double的例子,比如1.23L。因此,我应该将long double也作为C语言浮点型数据类型之一,尽管用户提供的引用中可能没有详细说明它的范围和精度,但根据标准C语言,它是存在的。 接下来,我需要明确每个类型的特点,比如存储空间、有效数字、范围以及如何声明和初始化。例如,float通常用后缀f,如3.14f;double可以不带后缀或者用e表示科学计数法;long double使用L后缀。这些信息在引用[2]和[3]中都有例子,比如float a = 3.14f; 和double x = 123.456e+3;。 另外,需要提到格式化输出,如%f对应小数,%e对应指数形式,%g自动选择较短的格式。这在引用[2]的代码示例中有体现,应该引用正确的例子。 还要注意不同编译器中类型的大小是否一致。引用[3]指出,float和double在不同位数的编译器下占用空间不变,都是4和8字节,但long double可能因编译器而异,但用户提供的引用中没有详细数据,所以可能需要简要说明。 最后,生成相关问题时要围绕浮点型数据类型,可能涉及精度、转换、应用场景等。比如如何选择不同的类型,精度差异的影响,科学计数法的使用等。 总结回答结构:先列出三种类型,然后分别说明每个的存储、有效数字、范围、声明方式、输出格式,并引用提供的资料作为支持。确保每个部分都有对应的引用标记,如[^1][^3]等。</think>### C语言浮点型数据类型详解 C语言浮点型数据类型主要用于存储小数值,包含以下三种基本类型: 1. **单精度浮点型(float)** - **存储空间**:固定4字节(与编译器位数无关)[^3] - **有效数字**:约6-7位十进制数[^1] - **声明方式**:需添加后缀`f`,例如: `float a = 3.14f;`[^3] - **输出格式**:使用`%f`(小数形式)、`%e`(指数形式)、`%g`(自动选择较短形式)[^2] 2. **双精度浮点型(double)** - **存储空间**:固定8字节[^3] - **有效数字**:约15-16位十进制数[^1] - **声明方式**:可省略后缀或使用科学计数法,例如: `double d1 = 101.1;` 或 `double x = 123.456e+3;`(即$123.456 \times 10^3$) - **输出格式**:与float相同,但精度更高 3. **扩展双精度型(long double)** - **存储空间**:通常为8字节或更大(依赖编译器和系统) - **声明方式**:添加后缀`L`,例如: `long double b = 1.23L;`[^3] #### 关键区别 | 类型 | 空间占用 | 典型有效数字 | 应用场景 | |------------|----------|--------------|------------------------| | `float` | 4字节 | 6-7位 | 低精度需求,节省内存 | | `double` | 8字节 | 15-16位 | 通用计算,默认选择 | | `long double` | ≥8字节 | ≥18位 | 高精度科学计算 | #### 示例代码(引用自资料) ```c #include<stdio.h> int main() { float a = 3.14f; // 单精度声明 double x = 0.3E6; // 科学计数法:0.3 × 10^6 printf("小数:%f 指数:%e", a, x); return 0; } ``` 输出结果为: `小数:3.140000 指数:3.000000e+05`[^2][^3]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值