/ 是 C 语言的二元除法运算符,整数除向零截断得整数结果,浮点参与则转为浮点除法,除零行为未定义或产生 inf。

/ 是 C 语言中的除法运算符,用于执行数值相除
它不是注释符号(那是 // 或 /* */),而是真正的二元算术运算符,左右操作数可以是整数或浮点数。结果类型和值完全取决于操作数的类型,而不是你“想”得到什么——这是新手最常误解的一点。
整数除法会直接截断小数部分,不四舍五入
当两个 int(或其它整型)参与 / 运算时,C 严格按整数除法处理:商向零截断,余数由 % 给出。
-
7 / 3得2(不是2.333...) -
-7 / 3得-2(向零截断,不是向下取整) -
7 / -3同样得-2 -
-7 / -3得2
注意:/ 本身不提供余数;要用 % 获取余数,且要求操作数必须为整型。
只要有一个操作数是浮点数,结果就是浮点数
C 的类型提升规则起作用:如果任一操作数是 float、double 或 long double,另一个整数会被自动转换为相同精度的浮点类型,整个运算按浮点除法进行。
立即学习“C语言免费学习笔记(深入)”;
-
7.0 / 3→double除法,结果约2.333333 -
7 / 3.0f→ 转成float除法,结果约2.333333 -
(double)7 / 3→ 显式强制转换,等效于7.0 / 3.0
常见陷阱:1 / 2 * 3.0 结果是 0.0,因为 1 / 2 先算成 0(整数除),再乘 3.0 才转成浮点——顺序和类型混合极易出错。
除零行为未定义,运行时可能崩溃或产生异常值
C 标准规定,对整数执行 / 或 % 时若右操作数为 0,行为未定义(UB)。实际表现依赖平台:
- x86/Linux 下通常触发
SIGFPE信号,程序终止 - 嵌入式环境可能锁死或返回随机值
- 浮点除零(如
1.0 / 0.0)则按 IEEE 754 规定,结果为inf或-inf,不报错但需用isinf()检测
所以,除非你明确控制输入范围,否则整数除法前务必检查除数是否为零;浮点除法则应检查是否接近零(用 fabs(denom) 类方式),而非只判 == 0.0。
真正麻烦的从来不是语法,而是类型隐式转换时机和除零边界的判断粒度——写 / 前,先想清楚左右两边到底是什么类型,以及除数有没有可能是 0。











