geloescht_Kaffeemacher Geschrieben 11. Juli 2003 Teilen Geschrieben 11. Juli 2003 Hi @all, ich brauch eure Hilfe, wie lautet der Code dafür: Wenn iEingabe nicht durch 2 teilbar ist, dann ..... Danke für eure Hilfe, thx kaffeemacher Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crow T. Robot Geschrieben 11. Juli 2003 Teilen Geschrieben 11. Juli 2003 Das geht ganz einfach mit dem Modulo-Operator: if( iEingabe % 2 == 0 ) { printf( "%d ist durch 2 teilbar.\n", iEingabe ); } else { printf( "%d ist nicht durch 2 teilbar.\n", iEingabe ); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Kaffeemacher Geschrieben 11. Juli 2003 Autor Teilen Geschrieben 11. Juli 2003 Danke für deine Antwort. Dies müsste doch dann auch so klappen if ( iEingabe % 8 == 0 ) { cout << "durch 8 teilbar" << endl; } else { cout << "nicht durch 8 teilbar" << endl; } greetz kaffeemacher Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crow T. Robot Geschrieben 11. Juli 2003 Teilen Geschrieben 11. Juli 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Kaffeemacher Geschrieben 13. Juli 2003 Autor Teilen Geschrieben 13. Juli 2003 Guten Morgen, danke für deine Erklärung. Hat mir sehr geholfen :marine greetz kaffeemacher Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 14. Juli 2003 Teilen Geschrieben 14. Juli 2003 Hallo, das läßt sich aber auch deutlich effizienter lösen, in dem man prüft, ob das letzte Bit gesetzt ist. Die Modulo-Operation ist wesentlich aufwändiger als Bitoperationen. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crow T. Robot Geschrieben 14. Juli 2003 Teilen Geschrieben 14. Juli 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 14. Juli 2003 Teilen Geschrieben 14. Juli 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Timon Geschrieben 17. Juli 2003 Teilen Geschrieben 17. Juli 2003 Mir ist keine CPU bekannt, auf der eine Modulo Operation schneller als eine Bit-Operation ist. Hast Du da mal ein Beispiel? Naja schneller als einfach Bitoperationen wirds kaum, aber genauso schnell schon: Bitte schön! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 17. Juli 2003 Teilen Geschrieben 17. Juli 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Kaffeemacher Geschrieben 17. Juli 2003 Autor Teilen Geschrieben 17. Juli 2003 Danke für EURE Beiträge Ihr habt mir sehr geholfen gruß kaffeemacher Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.