在 Delphi 中,DivMod 函数的声明是
procedure DivMod(Dividend: Cardinal; Divisor: Word;
var Result, Remainder: Word);
因此,除数、结果和余数不能大于 65535,这是一个相当严重的限制。为什么是这样?为什么不能声明
procedure DivMod(Dividend: Cardinal; Divisor: Cardinal;
var Result, Remainder: Cardinal);
该过程是使用汇编实现的,因此可能非常快。代码不可能
PUSH EBX
MOV EBX,EDX
MOV EDX,EAX
SHR EDX,16
DIV BX
MOV EBX,Remainder
MOV [ECX],AX
MOV [EBX],DX
POP EBX
适应红衣主教?天真的尝试慢了多少
procedure DivModInt(const Dividend: integer; const Divisor: integer; out result: integer; out remainder: integer);
begin
result := Dividend div Divisor;
remainder := Dividend mod Divisor;
end;
那不是(?)仅限于 16 位整数?