我已经看到这个问题关于在 C 中的单个操作中获得商和余数。但是 C
div
和 ldiv
函数采用 int
和 long
参数。但是我如何执行 unsigned 除法并在 C 中保存余数和商?据我所知,没有unsigned
版本的div
或ldiv
。我必须使用内联汇编吗?
只需使用
%
和 /
彼此足够接近,并让任何合理的现代优化编译器将它们翻译成一条指令。
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