[ Für Anfänger ] Returnwert von 2 Zahlen
-
int max(int a, int b) { __asm mov eax, dword ptr[a]; __asm cmp eax, dword ptr[b]; __asm jge reta; __asm mov eax, b; __asm jmp retb; reta: __asm mov eax, a; retb: }
Aufgabe gemäß Aufgabenstellung erfüllt und trotzdem performant . Allerdings ist __asm nicht Standard.
heftig
und ich dachte ich würde C++ verstehen (wenn das überhaupt C++ ist)
mfg
sOcKy
-
Ist Assemblercode der in C++-Code eingebettet ist. Also der Code hat nichts mit C++ zu tun.
MfG SideWinder
-
Ist Assemblercode
soviel zur Überschrift
[ Für Anfänger ]
mfg
sOcKy
-
Hi@all
Wie wäre es damit?
#include <iostream> using namespace std; int max(int, int); int main() { int a,b; cout << "Eingabe 1: "; cin >> a; cout <<"Eingabe 2: "; cin >> b; cout << max(a, b) << endl; return 0; } int max(int i, int j) { return (i > j) ? i : j; }
Cu
André
-
@Berufspenner: ?: is verboten
wie wärs damit?
int max(int a, int b) return (a + b + ( (a - b) & (~0U >> 1) ) ) / 2 }
-
Mr. N schrieb:
int max(int a, int b) return (a + b + ( (a - b) & (~0U >> 1) ) ) / 2 }
Ist auf jeder Plattform das höchstwertige Bit von signed int das Vorzeichenbit?
-
also man darf kein if benutzen... while in dem fall aber schon...
und auf einer zeile bedeutet nicht in einer anweisung oder
also:int max(int a, int b){ while(a>=b) return a; return b; }
edit:
In der Return Anweisung geschehen
mist! überlesen
-
socky schrieb:
und ich dachte ich würde C++ verstehen (wenn das überhaupt C++ ist)
Braucht man nicht wirklich zu verstehen wenn man nur C++ programmieren will. Kaum jemand bettet ASM in seine C++ Sourcen ein.
-
Mr. N schrieb:
@Berufspenner: ?: is verboten
Echt? Wuste ich nicht. Bin ja noch am lernen
Kannst du mir aber bitte noch veraten, warum es verboten ist?
Cu
André
-
Berufspenner schrieb:
Mr. N schrieb:
@Berufspenner: ?: is verboten
Echt? Wuste ich nicht. Bin ja noch am lernen
Kannst du mir aber bitte noch veraten, warum es verboten ist?
Cu
AndréHast du falsch verstanden. So ist das natürlich eine sehr schöne Möglichkeit. Bloß lautet die Aufgabenstellung "ohne if und op?:" und da du diesen Operator benützt ist die Lösung falsch ;).
MfG SideWinder
-
Da die Standard-Bibliothek scheinbar nicht benutzt werden darf ist die einfachste Lösung wohl:
return (b > a) * (b - a) + a;
Man nimmt an, das a der größere Wert ist. Falls das nicht so ist addiert man eben das hinzu, was zu b fehlt.
-
Helium schrieb:
Da die Standard-Bibliothek scheinbar nicht benutzt werden darf ist die einfachste Lösung wohl:
return (b > a) * (b - a) + a;
Man nimmt an, das a der größere Wert ist. Falls das nicht so ist addiert man eben das hinzu, was zu b fehlt.
ist true denn standardmäßig als 1 und false als 0 definiert?
-
Ja
-
SideWinder schrieb:
Hast du falsch verstanden. So ist das natürlich eine sehr schöne Möglichkeit. Bloß lautet die Aufgabenstellung "ohne if und op?:" und da du diesen Operator benützt ist die Lösung falsch ;).
MfG SideWinder
Achso, ich hatte die Klamma überlesen
Cu
André
-
So, und jetzt das ganze ohne die Verwendung von <, >, <=, >=, ?:, Standardfunktionen, inline-asm, if, while etc. und alles in einer Zeile in der Returnanweisung. Wer das schafft ist ab heute mein persönliches Vorbild
.
EDIT: Oder geht es doch? Mal probieren...
-
MaSTaH schrieb:
So, und jetzt das ganze ohne die Verwendung von <, >, <=, >=, ?:, Standardfunktionen, inline-asm, if, while etc. und alles in einer Zeile in der Returnanweisung. Wer das schafft ist ab heute mein persönliches Vorbild
.
MrN? Zumindest auf vielen Plattformen.
-
Stimmt, geht doch. Übersehen
. Naja, plattformunabhängig wird es wohl einfach nicht gehen.