我听说当处理器进行 / 或 % 运算时,它将执行相同的操作,但一种方式返回商,另一种方式返回余数。
是否可能在单个操作中获得两者?也许如果我加入一小段汇编代码(我以前从未做过)?
我听说当处理器进行 / 或 % 运算时,它将执行相同的操作,但一种方式返回商,另一种方式返回余数。
是否可能在单个操作中获得两者?也许如果我加入一小段汇编代码(我以前从未做过)?
是的,编译器将为您执行此操作。只需使用相同操作数的除法后紧跟余数即可。
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
的作用。