[英]Is it possible to get both the modulus and quotient of division in a single operation in C++?
我聽說當處理器執行 / 或 % 時,它將執行相同的操作,但一種方式返回商,另一種方式返回余數。
是否可以在一次操作中同時獲得兩者? 也許如果我加入一段匯編代碼(我從未做過)?
是的,編譯器會為你做這件事。 只需使用除法后跟具有相同操作數的余數。
https://godbolt.org/z/oK4f4s
void div(int n, int d, int *q, int *r)
{
*q = n / d;
*r = n % d;
}
div(int, int, int*, int*):
mov eax, edi
mov r8, rdx
cdq
idiv esi
mov DWORD PTR [r8], eax
mov DWORD PTR [rcx], edx
ret
是否可以在一次操作中同時獲得兩者?
不,C++ 中沒有這樣的運算符。 標准庫中有一個函數可以執行這兩種操作: std::div
但這沒關系。 無論您在 C++ 中有一個還是兩個操作,並不意味着 cpu 必須執行那么多操作。 一個不錯的優化器將能夠將兩個操作轉換為一條指令(假設目標 CPU 可以實現)。
是的。 這就是std::remquo
和std::div
函數所做的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.