是否可以在C中一次获得无符号商和余数?

问题描述 投票:0回答:1

我已经看到这个问题关于在 C 中的单个操作中获得商和余数。但是 C

div
ldiv
函数采用
int
long
参数。但是我如何执行 unsigned 除法并在 C 中保存余数和商?据我所知,没有
unsigned
版本的
div
ldiv
。我必须使用内联汇编吗?

c performance division micro-optimization unsigned-integer
1个回答
3
投票

只需使用

%
/
彼此足够接近,并让任何合理的现代优化编译器将它们翻译成一条指令。

Godbolt 示例

struct res { 
    unsigned long long quo;
    unsigned long long rem;
} 
f(unsigned long long x, unsigned long long y) {
    struct res r;
    r.quo = x / y;
    r.rem = x % y;
    return r;
}

由 GCC 11.2 编译

-O2
至:

f:
        mov     rax, rdi
        xor     edx, edx
        div     rsi
        ret
© www.soinside.com 2019 - 2024. All rights reserved.