Skip to content

Commit b9615d4

Browse files
committed
C 语言系统教程第三章练习题答案 bug 修复
搞忘把“### 练习 1 参考答案”打上去了awa 其他.md格式修正是 VS Code 插件自动修改的格式
1 parent 992c7c4 commit b9615d4

1 file changed

Lines changed: 18 additions & 16 deletions

File tree

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

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
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+
2021
# 浮点、字符、const 与类型转换
2122

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

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

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

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

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

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

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

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

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

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

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

370373
提示:`sizeof` 返回的是什么类型?
371374

372-
373375
### 练习 2 参考答案
374376

375377
```c

0 commit comments

Comments
 (0)