簡體   English   中英

是否可以在 C++ 中的單個操作中同時獲得除法的模數和商數?

[英]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::remquostd::div函數所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM