防整数溢出必须运算前检查,优先用std::numeric_limits::max()预判边界或换long long类型;浮点比较禁用==,应以误差范围fabs(a-b)

不需要高等数学基础也能开始写 C++,能算清楚 1000 * 1000 不溢出、知道 0.1f + 0.2f != 0.3f 是常态,就具备动手写入门级程序的数学前提。
整数运算与溢出陷阱怎么避开
初学者常以为 int 能装下任意“看起来不大”的数。实际上在大多数平台,int 是 32 位有符号类型,最大值约 21 亿;100000 * 100000 就已溢出,结果变成负数。
- 用
sizeof(int)查实际大小,别凭感觉 - 做乘法前先判断:若
a > INT_MAX / b(且b > 0),则可能溢出 - 临时换用
long long或无符号类型unsigned int,但要同步检查边界语义是否合理 - 竞赛或工程中更稳妥的做法是直接用
std::numeric_limits<int>::max()</int>配合条件判断
浮点数比较为什么不能用 ==
float 和 double 遵循 IEEE 754 标准,十进制小数如 0.1 在二进制中是无限循环小数,存储时必然截断——所以 0.1f + 0.2f 的结果不是精确的 0.3f,而是近似值。
- 永远不要写
if (x == 0.3f),改用误差范围判断:if (fabs(x - 0.3f) -
double精度更高,但问题本质相同;不要因为用了double就放松警惕 - 金融计算等必须精确的场景,应避免浮点数,改用整数 cents 表示金额,或引入
boost::multiprecision
哪些数学概念会高频出现在入门代码里
不是要你推导公式,而是得认得出、用得对这些基础结构:
-
%运算符是取余,不是取模(C++ 中对负数结果依赖实现,建议只对非负操作数使用) -
gcd(a, b)没有标准库函数,但几行欧几里得算法就能写出来:while (b) { int t = a % b; a = b; b = t; } - 坐标计算、距离公式、简单旋转都只涉及
sqrt、sin、cos,头文件是<cmath></cmath>,注意参数单位是弧度 - 布尔逻辑中
!(a && b)等价于!a || !b,这不是技巧,是德摩根定律——写错条件时优先检查这个
真正卡住新手的,往往不是“不会解方程”,而是把 int 当万能容器、拿 == 比较浮点数、混淆 / 和 % 的适用场景。这些点不靠数学考试得分,靠写几段代码、看几条错误输出,就能建立直觉。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











