Skip to content

Commit a891139

Browse files
committed
Update 02B-float-char-const-cast.md
1 parent abb4af2 commit a891139

1 file changed

Lines changed: 16 additions & 19 deletions

File tree

documents/vol1-fundamentals/c_tutorials/02B-float-char-const-cast.md

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
---
22
chapter: 1
33
cpp_standard:
4-
- 11
4+
- 11
55
description: 掌握 C 语言的浮点类型与精度问题、字符存储与编码、const 限定符和隐式类型转换规则,理解 C++ 类型安全设计的动机
66
difficulty: beginner
77
order: 3
88
platform: host
99
prerequisites:
10-
- 数据类型基础:整数与内存
10+
- 数据类型基础:整数与内存
1111
reading_time_minutes: 12
1212
tags:
13-
- host
14-
- cpp-modern
15-
- beginner
16-
- 入门
17-
- 基础
13+
- host
14+
- cpp-modern
15+
- beginner
16+
- 入门
17+
- 基础
1818
title: 浮点、字符、const 与类型转换
1919
---
20-
2120
# 浮点、字符、const 与类型转换
2221

2322
上一篇里我们把整数家族从里到外拆了一遍——整型层级、有符号无符号、固定宽度类型和 sizeof。但程序世界里不只有整数:商品价格需要小数,屏幕上的文字需要字符,变量声明后有时候需要保护它不被乱改,不同类型的数据混在一起运算时编译器到底怎么处理。这些就是我们今天要一块一块啃的内容。
@@ -36,7 +35,7 @@ title: 浮点、字符、const 与类型转换
3635

3736
我们接下来的所有实验都在这个环境下进行:
3837

39-
- 平台:Linux x86_64(WSL2 也可以)
38+
- 平台:Linux x86\_64(WSL2 也可以)
4039
- 编译器:GCC 13+ 或 Clang 17+
4140
- 编译选项:`-Wall -Wextra -std=c17`
4241

@@ -46,11 +45,11 @@ title: 浮点、字符、const 与类型转换
4645

4746
C 语言提供了三种浮点类型,按精度从小到大排列:
4847

49-
| 类型 | 典型位数 | 有效数字 | 字面量写法 |
50-
| ------------- | --------------- | -------- | -------------- |
51-
| `float` | 32 位(单精度) | 约 7 位 | `3.14f` |
52-
| `double` | 64 位(双精度) | 约 15 位 | `3.14`(默认) |
53-
| `long double` | 80 或 128 位 | 平台相关 | `3.14L` |
48+
| 类型 | 典型位数 | 有效数字 | 字面量写法 |
49+
|------|---------|---------|-----------|
50+
| `float` | 32 位(单精度) | 约 7 位 | `3.14f` |
51+
| `double` | 64 位(双精度) | 约 15 位 | `3.14`(默认) |
52+
| `long double` | 80 或 128 位 | 平台相关 | `3.14L` |
5453

5554
`double` 是默认的浮点类型——你写 `3.14` 的时候,编译器就把它当作 `double` 处理。如果要用 `float`,记得加 `f` 后缀;要用 `long double`,加 `L` 后缀。
5655

@@ -68,8 +67,8 @@ long double ld = 3.14L; // 后缀 L 表示 long double
6867

6968
十进制科学计数法把 `0.0123` 写成 `1.23 × 10⁻²`,一个尾数乘以 10 的幂。计算机干的事一样,只是底换成 2:`小数 = (±1) × 尾数 × 2^指数``float` 的 32 个位就照这三块切:
7069

71-
| 1 位符号 | 8 位指数 | 23 位尾数 |
72-
| -------- | ---------------------------- | ---------------------------- |
70+
| 1 位符号 | 8 位指数 | 23 位尾数 |
71+
|---|---|---|
7372
| 正还是负 | 决定能表示多大、多小(范围) | 决定有多少位有效数字(精度) |
7473

7574
指数位管量级,尾数位管精细度,两个都有限。指数让你能写到 `10³⁸` 那么大、也能小到 `10⁻⁴⁵`;可尾数只有 23 位,有效数字大概就 7 位十进制,再多存不下。
@@ -340,9 +339,6 @@ int main(void)
340339
}
341340
```
342341
343-
### 练习 1 参考答案
344-
345-
346342
```text
347343
a_double + b_double == c_double? no
348344
a_float + b_float == c_float? yes
@@ -394,6 +390,7 @@ if (target < sizeof(values) / sizeof(values[0])) {
394390

395391
提示:`sizeof` 返回的是什么类型?
396392

393+
397394
### 练习 2 参考答案
398395

399396
```c

0 commit comments

Comments
 (0)