C++ 整数の除算と剰余を得るための最良の方法 質問する

C++ 整数の除算と剰余を得るための最良の方法 質問する

疑問に思っているのは、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)。これはおそらく他のアーキテクチャでも行われます。

指示: DIVsrc

注: 符号なし除算。アキュムレータ (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. */

おすすめ記事