常见问题 ¶
这里分模块汇总了程设辅学群中的常见问题及其解答。
基本数据类型、运算符、表达式和语句 ¶
有布尔类型吗?
Author:朱宝林
布尔类型的历史:
- 最早的 C 语言规范中没有布尔类型。
- C99 引入了
_Bool
类型和<stdbool.h>
头文件。该头文件定义了bool
、true
和false
三个便利宏。bool
展开成_Bool
。true
和false
分别展开成int
类型的1
和0
。
- C23 正式使用
bool
代替_Bool
作为类型名。true
和false
也直接展开为bool
类型值。
因此,从 C23 以后,我们终于有了 bool
类型。bool
、true
、false
全都成为了 C 的关键字。
关于布尔类型的使用:
- 到
bool
的转换与到其他整数类型的转换不同:(bool)0.5
求值为1
,然而(int)0.5
求值为0
。在给_Bool
类型赋值时需要注意这一点。
浮点数是如何存储的?为什么它不精确?
Author:朱宝林
下面的内容来自《计算机科学导论
如果你读完了上面的内容,你应该能理解浮点数存储不精确的原因:
- 浮点数的尾数部分长度有限,无法存储无限的小数。
有一个经典的例子:0.1 + 0.2 == 0.3
是错的。这一例子在每日一题中也有提及。那么如何解决这个问题呢?只要将误差控制在一定范围内即认为正确,比如:
if(fabs(a - b) < 1e-6) {
// a 和 b 相等
}