【发布时间】:2014-09-21 14:55:42
【问题描述】:
以下内容摘自 Mike Banahan 和 Brady (Link: Section 2.8.2.1) 的 C 书籍。像我这样的普通人没有理由怀疑作者是错的,除非你们另有建议。
请告诉我 "(a/b)*b + a%b - a" 对于 b 不为零的整数如何始终为零。
提取的文本如下:
如果任一操作数为负数,则 / 的结果可能是最接近的 整数到两边的真实结果,以及结果的符号 % 可以是正数或负数。这两个特点都是 实现定义。
以下表达式等于零总是正确的:
(a/b)*b + a%b - a除非 b 为零。
通常的算术转换适用于两个操作数。
【问题讨论】:
-
请注意,它是在 C89 中实现定义的。从 C99 开始,除法被定义为向 0 舍入(并且给定的等式仍然成立)。
标签: c type-conversion expression division modulo