平时用电脑算数,不管是加减乘除,看起来都挺简单。但你可能没注意,电脑在处理整数和小数的时候,其实完全是两套路子。比如你算 5 + 3 和算 5.1 + 3.2,虽然都是加法,背后的操作可不一样。
整数运算是“精确又快”的代表
整数,比如 -3、0、7、100,没有小数点,电脑处理起来特别干脆。CPU 里有专门的整数运算单元(ALU),直接用二进制做位运算,速度快,结果还绝对精确。比如你在写个循环计数,i++ 这种操作,全都是整数运算,效率高得飞起。
举个例子,在编程中计算商品总件数:
int count = 5;
int total = count * 3; // 结果是 15,毫无误差
小数运算其实是“近似计算”
小数,也就是浮点数,像 3.14、0.0001 这类,电脑处理起来就复杂多了。它用的是 IEEE 754 标准,把数字拆成符号位、指数位和尾数位存起来。这种表示法注定有些小数没法精确存储,比如 0.1 在二进制里就是个无限循环小数。
这就导致一个常见问题:你以为的简单计算,结果可能有点“离谱”。
float a = 0.1;
float b = 0.2;
float c = a + b; // 你以为是 0.3?实际可能是 0.30000001
这种情况在金融计算里特别危险,一毛钱算错,账就对不上。
性能和资源消耗也不同
整数运算占用资源少,耗电低,适合嵌入式设备或手机这类对性能敏感的场景。而浮点运算需要额外的浮点运算单元(FPU),更耗电,速度也慢一些。老式单片机甚至压根不支持浮点,程序员只能用整数模拟小数,比如把金额乘以 100 当作“分”来算。
什么时候该用哪种?
如果你在做统计、图形渲染、科学计算,那免不了用小数。但如果是计数、索引、逻辑判断,一律用整数。别图省事把循环变量写成 float,不仅浪费资源,还可能出 bug。
再比如你写个购物车程序,商品数量用 int,总价用 double 就行了。数量不可能是 2.5 个,但价格可以是 19.99 元。合理区分类型,程序才既准确又高效。