Teilbarkeit herausfinden

Neue Frage »

Fealy Auf diesen Beitrag antworten »
Teilbarkeit herausfinden
Hey,

im Rahmen einer Rechnung (Informatik), habe ich eine Obergrenze für eine Leitung. Angenommen diese sei 1000. Um nicht zu genau ins Detail zu gehen, soll nur gesagt sein dass die Datei größer 1000 ist und Fragmentiert werden muss.

Dabei muss nun aber beachtet werden, dass zu einem Fragment noch etwas dazuaddiert wird (Header).

So kann man für das erste Fragment bestimmen, dass sich dieses aus 1000-20= 980 Bytes bestehen muss.

Zusätzlich (und hier kommt das worauf ich eigentlich hinaus will) muss gewährleistet sein, dass zB die 980 durch 8 Teilbar ist.

Die nächstkleinere Zahl ist also 976.

Meine mathematische Frage lautet daher: Wie kann ich auf dem schnellsten Wege prüfen, ob

a) Eine Zahl durch 8 Teilbar ist
b) Wenn a) nicht zutrifft, man ohne herumzurechnen die nächstkleinere Zahl ausfindig machen kann durch die 8 keinen Divisionsrest ergibt.

Ich freue mich auf Eure Antworten

Lg,

Fealy
IfindU Auf diesen Beitrag antworten »
RE: Teilbarkeit herausfinden
Das schnellste wird sein Modulo-Funktionen zu benutzen. In C würde man (n % d) schreiben, um rauszufinden, welchen Rest n liefert, wenn man es durch d teilt. So würde also 980 % 8 = 4 liefern. Da es ungleich 0 ist, ist 980 also nicht durch 8 teilbar, aber 980 - 4 ist die größte Zahl, die noch kleiner als 980 ist, die durch 8 teilbar ist.
Fealy Auf diesen Beitrag antworten »
RE: Teilbarkeit herausfinden
Super - Danke!
HAL 9000 Auf diesen Beitrag antworten »

Bei Modulen, die Zweierpotenzen entsprechen, kann man auch einfach mit einer UND-Maske aus Einsen operieren, das entspricht der Zahl - sofern die gewählte Programmiersprache sowas kennt. Z.B. in C/C++ sähe das in deinem Fall so aus

Rest = 980 & 7

Allerdings sind heutzutage alle besseren Compiler in der Lage, sowas selbst zu erkennen, und auch bei Programmierung der Zeile

Rest = 980 % 8

die für den Prozessor schneller ausführbare Variante (was die UND-Maske ist) zu wählen. Augenzwinkern
Mystic Auf diesen Beitrag antworten »

Aber eigentlich wollte Fealy ja die nächstkleinere durch 8 teilbare Zahl zu n... In C/C++/C# wäre das dann (n>>3)<<3... Augenzwinkern
HAL 9000 Auf diesen Beitrag antworten »

Zitat:
Original von Mystic
In C/C++/C# wäre das dann (n>>3)<<3... Augenzwinkern

Zuviel Geshifte, ich bevorzuge n & (~7)

P.S.: Muss vielleicht langsam ins Informatikforum. Big Laugh
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »