Zum Inhalt springen

Teilbarkeit durch 2 (war: Wie lautet der Code für....)

Empfohlene Beiträge

Wieso müsste? Klappt das bei dir etwa nicht?

Der Modulo-Operator gibt immer den Restwert einer ganzzahligen Division. Daraus ergibt sich, dass das Ergebnis immer null ist, wenn eine Zahl "ganz" durch eine andere Zahl teilbar ist, da dann kein Rest bleibt.

Beispiele:

- 32 ist ganz durch 8 teilbar, das Ergebnis ist 4 Rest 0. Modulo würde also 0 liefern.

- 43 ist nicht ganz durch 8 teilbar, das Ergebnis ist 5 Rest 3. Modulo liefert also 3.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Ob das effizienter ist, kann man so pauschal nicht sagen. Das kommt ganz darauf an, was der Compiler daraus fabriziert und wozu die CPU fähig ist.

Ausserdem hättest du gleich noch dazu schreiben sollen, wie das mit bitweisen Operatoren funktioniert:

if( iEingabe & 1 ) {

    /* ungerade, nicht durch zwei teilbar */

} else {

    /* gerade, durch zwei teilbar */

}

Davon mal abgesehen, ist der Modulo-Operator flexibler, da man die Teilbarkeit mit einer beliebigen Zahl prüfen kann.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hallo,

Original geschrieben von Crow T. Robot

Davon mal abgesehen, ist der Modulo-Operator flexibler, da man die Teilbarkeit mit einer beliebigen Zahl prüfen kann.

Nach der Teilbarkeit durch eine beliebige Zahl wurde aber nicht gefragt. Man sollte für ein bestehendes Problem nach Möglichkeit immer eine effiziente Lösung suchen, die unabhängig (auch in Bezug auf die Performance) von Compiler, Betriebssystem und CPU ist. Modulo ist da ein sehr schlechtes Beispiel.

Mir ist keine CPU bekannt, auf der eine Modulo Operation schneller als eine Bit-Operation ist. Hast Du da mal ein Beispiel?

Nic

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hallo,

Hast Du den Artikel auch genau gelesen? Es geht hier nicht um die Abbildung der C-Modulo Funktion in Hardware, sondern um einen Instruktion, die in der Lage ist a x b + c + d in einer Instruktion zu Kodieren (und _möglicherweise_ auch in einem Zyklus auszuführen). Üblicherweise würden man mindestens zwei Instruktionen benötigen. Die Instruktion wird verwendet, um die Modulo-Artithmetik zu beschleunigen, nicht um den ganzzahligen Rest einer Division in einem Zyklus zu erzeugen. Hinzu kommt, das es in dem von Dir genannten Artikel um die Multiplikation grosser Zahlen geht (1024 Bits und nicht um die natürliche Wortlänge der CPU, also 32 oder 64 Bit), wie sie beispielsweise im Bereich der Kryptographie eingesetzt werden. Viele moderne CPUs unterstützen diese oder ähnliche Instruktionen.

Gute Compiler sind in der Lage, Modulo Berechnungen die mit zweier-Potenzen arbeiten auf die entsprechende Bit-Operation abzubilden, die komplett in Hardware abgearbeitet werden kann (man sollte sich aber nicht darauf verlassen!).

Nic

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Deine Meinung

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich an , um mit Deinem Konto zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


Fachinformatiker.de, 2020 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung