Why int/int = int?

Why int/int = int?

本文关键字:int Why      更新时间:2023-10-16

为什么当我除以两个整数时,结果是整数而不是浮点数,为什么选择这个设计决策?

当早期的C被设计时,许多当代硬件没有浮点支持。

当浮点类型在其前身(BCPL 和 B)上添加到 C 时,除法运算符的整数语义保持不变。

BCPL手册使阅读变得有趣(强调我的):

5.1 算术表达式

句法形式:

E1 * E2E1 / E2E1 rem E2E1 + E2+E1E1 - E2-E1

语义:所有这些运算符将其操作数的 R 值解释为有符号整数,并且都产生整数结果

如果除法运算符/ E1可被E2整除,则产生 [E1除以 E2 的正确结果;否则它依赖于实现,但舍入误差永远不会大于 1。

算子rem得到E1的余数除以E2;其确切的规范取决于实现。

很明显,可移植性不是问题,并且允许该语言执行底层硬件所做的任何操作。

即使在今天,也有很多平台支持C,但没有浮点硬件(例如,小型嵌入式平台)。

一些现代高级语言选择将int / int定义为浮点除法。例如,Python 3 确实如此,并且有一个单独的运算符 // 用于整数除法。有趣的是,该整数除法运算符的舍入规则与其 C 对应项不同。[*]

如果你对C语言的历史感兴趣,可以看看Dennis Ritchie的《C语言的发展》。

[*] Python 整数也很有趣,因为它们是任意精度的。