Rechnen in C
-
Lisa schrieb:
Ja, sehr schön! So hatte ich das auch in Erwägung gezogen, war mir aber nicht sicher, was nun wirklich schneller ist (und ressourcenschonend) im Mikroprozessor. Ist Schieben grundsätzlich schneller als "normales" Multiplizieren?
Im Grund optimiert das jeder halbwegs praktikable Compiler fuer dich, d.h. im Normalfall reichts aus dass du "a * 4" oder "a / 9" hinschreibst und der Compiler macht dann das draus, was am Schnellsten ist. Leider gibts noch genug Leute, die das anscheinend nicht kapiert haben. Wenn derjenige, der deine Hausaufgaben korrigiert, so jemand ist, dann wirst du wohl immer selber shiften muessen (weil das in der Regel schneller ist als ein Mult/Div, aber wie gesagt, um sowas kuemmert sich der Compiler).
-
Lisa schrieb:
Meine Lösung: ( a && !b )
Soweit ok, kann man noch weiter vereinfachen:
a && !b
a && 0
0MfG
-
najanun schrieb:
Lisa schrieb:
Meine Lösung: ( a && !b )
Soweit ok, kann man noch weiter vereinfachen:
a && !b
a && 0
0Ähh... "soweit ok?"?! Das könnte man auch anders vereinfachen:
( ergebnis(lisa) => ergebnis(najanun) ) true
Ich werf mal Folgendes in die heitere Raterunde. Im Ergebnis kommen sind wir uns ja alle einig, damit Lisa für den abzuschreibenden Lösungsweg etwas mehr Auswahl hat, schlage ich mal Alternative zu 'soweit ok' vor:
a && !( a || b ) <=> a && ( !a && !b ) <=> a && !a && !b <=> (a && !a) && !b <=> false && !b <=> false
Lisa schrieb:
2. Wie dividiert man am schnellsten durch 4?
Meine Lösung: ( a >>= 2 )
3. Wie multipliziert man am schnellsten mit 4?
Meine Lösung: ( a <<= 2 )Deine Lösungen sind hier richtig, schneller als Shiften geht nicht und ein halbwegs brauchbarer C-Programmierer muss hier ohne Nachdenken verstehen, was Du da tust.
Auf modernen CPUs ist das aber nicht am schnellsten, sondern nur noch genauso schnell wie ein (a *= 4) bzw. ein ( a /= 4 ). Solltest Du auf alten CPUs arbeiten, benutze das Shiften, solltest Du einen Pentium IV oder vergleichbares haben, denke an die C-Programmierer, die noch halbwegs brauchbar werden wollen.
Multiplikation und Division - insbesondere derart einfache - werden inzwischen ebenso in einem Takt erledigt.Edit: Falsche Uhrzeit für schnelles tippen... :-\
-
a && !( a || b )
a && ( !a && !b ) // soweit ok, die klammer braucht nicht aufgelöst zu werden:
a && ( 0 )
0
qed
-
achnajanun schrieb:
a && !( a || b )
a && ( !a && !b ) // soweit ok, die klammer braucht nicht aufgelöst zu werden:
a && ( 0 )
0
qedwenn du !( a || b) nach (!a && !b) umstellst, verschwindet die klammer automatisch.
...aber wieso soll (!a && !b) 0 sein? die 0 ergibt sich eher durch a && !a (weshalb die &-verknüpfung mit b hinfällig wird).
-
Undertaker schrieb:
...aber wieso soll (!a && !b) 0 sein?
Du hast völlig Recht, könnte auch 1 sein, wenn a und b vorher 0 waren.
Das hat der Xin schon ganz vernünftig gemacht mit:
a && ( !a && !b )
<=> a && !a && !b
<=> (a && !a) && !b
<=> false && !b
<=> falseIch bin aber auch dooooooof
-
achnajanun schrieb:
Undertaker schrieb:
...aber wieso soll (!a && !b) 0 sein?
Du hast völlig Recht, könnte auch 1 sein, wenn a und b vorher 0 waren.
Das hat der Xin schon ganz vernünftig gemacht mit: [...]Ich bin aber auch dooooooof
Ein Mißgeschick zuzugeben, wenn der Groschen gefallen ist, macht vielleicht nicht intelligenter, aber in jedem Fall symphatischer.
-
Die Einstellung ist gut
Dann müsste ich ja am sympatischten sein
-
Dennis123 schrieb:
Die Einstellung ist gut
Dann müsste ich ja am sympatischten seinSofern ich in der Lage bin, etwas zu erklären, so mache ich das gerne für jemanden, der zuhört.
Häufig hat man auch einfach nur ein Hin und Her und irgendwann steigt einer aus, ohne dass man weiß, ob es ihm was gebracht hat oder nicht.
Wenn es demjenigen nichts bringt, dann kann ich mir den Aufwand sparen. Wenn es was bringt, macht's Spaß.
-
Hallo nochmal,
da habe ich ja eine richtige Diskussion losgetreten. Ich danke Euch nochmal für die wirklich superschnelle und kompetente Hilfe!
Mir ist schon klar, dass die Aufgaben nur feststellen sollen, ob man weiß, was Verschieben ist. Später erledigt das dann der Compiler. Danke auch für den guten Link. Die Laufzeitunterschiede sind schon sehr interessant.
Ihr wisst doch, wie das ist. Als Anfänger habe ich den Praxisbezug solcher Aufgaben ja nicht in Frage zu stellen.
Euch allen noch einen schönen Sonntagabend,
liebe Grüße
Lisa