疑問に思っているのは、a を b で割り、結果 c と余りの両方に関心がある場合 (たとえば、秒数があり、それを分と秒に分割したい場合)、最適な方法は何ですか?
それは
int c = (int)a / b;
int d = a % b;
または
int c = (int)a / b;
int d = a - b * c;
または
double tmp = a / b;
int c = (int)tmp;
int d = (int)(0.5+(tmp-c)*b);
または
両方を同時に実現する魔法の機能があるのでしょうか?
ベストアンサー1
x86 では、剰余は除算自体の副産物なので、まともなコンパイラであれば、それをそのまま使用できるはずです (再度実行する必要はありませんdiv
)。これはおそらく他のアーキテクチャでも行われます。
指示:
DIV
src注: 符号なし除算。アキュムレータ (AX) を "src" で除算します。除数がバイト値の場合、結果は AL に格納されます。残りはAHへ除数がワード値の場合、DX:AXは「src」で除算され、結果はAXに格納されます。残りはDXに保存されます。
int c = (int)a / b;
int d = a % b; /* Likely uses the result of the division. */