Zitat von
Coder:
oder gibt es evtl source zu so einer Funktion?
den gibt mit sicherheit irgendwo, aber wozu, wenn man schonmal im binärsystem dividieren musste (wenn schon für nix anderes ist informatikunterricht zumindest dafür gut
), ist es eigentlich recht einfach, eine mod funktion (bzw. div, da beides in einem rutsch berechnet wird) nachzuprogrammieren.
Dazu muss man lediglich wissen, dass im binärsystem ausgehend vom höchstwertigsten bit des dividenten, die zahl der der abzufragenden bits immer weiter erhöhend, auf den wert des divisors überprüft wird, sollte dieser erreicht oder überschritten sein wird er abgezogen und es wird weitergerechnet. das könnte z.B. so aussehen:
Delphi-Quellcode:
procedure _shld(
var Dest,Source: Cardinal);
begin
Dest := Dest
shl 1;
Dest := Dest
or Byte( (Source
and $80000000) > 0 );
Source := Source
shl 1;
end;
function _Mod(Dividend,Divisor: Cardinal): Cardinal;
var Count: Byte;
begin
Result := 0;
Count := 32;
// 31 bits, also 31 mal schieben
repeat
_shld(Result,Dividend);
// schiebe nächstes bit in result
if Result >= Divisor
then // s.o., bedingung erfüllt?
Result := Result - Divisor;
// falls ja, divisor abziehen
Dec(Count);
until Count = 0;
end;
und @Aenogym:
klar, wozu das
rad neuerfinden, aber wenn man verstehen will was im rechner passiert wenn man (X mod Y) irgendwo hinschreibt isses manchma unabdinglich