问题描述
机器语言中%操作符和fmod()函数的C翻译结果是什么?它的实现是什么?
例如:61199 % 256
的解法与 61199 % 171
的解法相同吗?
解决方法
如果平台支持整数除法,就像所有现代非嵌入式处理器一样,它是一条指令。除法指令给出商和余数。
考虑这个 C 程序 (https://godbolt.org/z/vxj8fKdjG):
int main() {
int a = 61199;
int b = 171;
int c = a % b;
}
它编译为:
main:
push rbp
mov rbp,rsp
mov DWORD PTR [rbp-4],61199
mov DWORD PTR [rbp-8],171
mov eax,DWORD PTR [rbp-4]
cdq
idiv DWORD PTR [rbp-8]
mov DWORD PTR [rbp-12],edx
mov eax,0
pop rbp
ret
在这个输出中,idiv
是除法指令。