整数与浮动分部 - >谁负责提供结果?

nsi*_*akr 7 c c++ integer division integer-division

我已经在C++中编程了一段时间,但突然有一个疑问,并希望澄清Stackoverflow社区.

当一个整数除以另一个整数时,我们都知道结果是一个整数并且是明智的,浮点除以float也是一个浮点数.

但谁负责提供这个结果?是编译器还是DIV指令?

Car*_*rum 12

这取决于您的架构是否DIV指令.如果您的体系结构具有整数和浮点除法指令,则编译器将针对代码指定的情况发出正确的指令.语言标准规定了类型提升的规则,以及是否应在每种可能的情况下使用整数或浮点除法.

如果只有整数除法指令或只有浮点除法指令,编译器将内联一些代码或生成对数学支持库的调用来处理除法.除法指令的速度非常慢,因此大多数编译器会尽可能地优化它们(例如,用移位指令替换,或者预先计算结果以进行编译时常量的除法).


Wil*_*l A 3

编译器将在编译时根据所使用的变量的类型决定需要哪种形式的除法 - 最终将涉及一种或另一种形式的 DIV(或 FDIV)指令。