Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zur Programmiersprache C
Calamity- Jade
19.12.2005, 16:51
Hi. ^_^
Ich habe die Hoffnung, dass es hier ein paar Leute gibt, die sich mit der Programmiersprache C auskennen...ich habe nämlich von meinem Informatiklehrer eine kleine Aufgabe aufbekommen, die ich gar nicht so leicht finde. ^_^
Es geht um diese drei Codezeilen, ich müsste wissen, das sie genau tun/tun könnten. Ich dachte außerden, die zeilen würden ein und denselben befehel ausdrücken, aber anscheinend ist das doch nicht so. Könnte mir vielleicht jemand sagen, worin der Unterschied zwischen diesen Zeilen besteht und was man tun könnte, damit er nicht mehr besteht?^^
Wir haben weder die benötigte Software bekommen, noch Lektüre, wo man die Benutzungsweise dieser Sprache herausfinden kann, nichts. Das soll eine Art Einstiegsaufgabe in dieses Thema sein...dementsprechend habe ich nicht die geringste Ahnung davon und weiß auch nicht, wonach ich suchen soll
Hier sind sie:
if(a==b) c = 1; else c = 0;
c = (a==b) ? 1 : 0;
c = (a==b);
Das wäre wirklich sehr lieb von euch.
- Jade
Prinzipiell tun diese Codes alle das gleiche.
if(a==b) c = 1; else c = 0;Das vergleicht a und b. Wenn a und b gleich sind, weist der Code c den Wert 1 zu, andernfalls 0.
c = (a==b) ? 1 : 0;Der sog. trinäre Operator x ? y : z prüft, ob die Bedingung x true ergibt, falls ja, gibt der Ausdruck y zurück, falls nein, z.
c = (a==b);Das überprüft, ob a und b gleich sind und weist das Ergebnis der Überprüfung (true oder false, als Zahl 1 oder 0) c zu.
Die Ausführung führt also bei allen Codes zum selben Ergebnis.
Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.
Edit: oh, hast du ja geschrieben, habs überlesen
Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.Technisch sind true und false (in C) AFAIK meist nur Konstanten für 1 und 0 und werden intern als Integer verarbeitet, daher würde ich mq zustimmen: Alle drei Zeilen sind gleich.
Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.... was ich auch so geschrieben habe. Unter dem Code steht's direkt, dadrüber steht, dass die Codes prinzipiell das Gleiche tun, nicht exakt das Gleiche.
Drunter steht zwar, dass die Ausführung das gleiche Ergebnis gibt, aber ich gehe auch vom gleichen Kontext aus, sprich, dass c immer auf den gleichen Typ deklariert ist.
@ Dingsi:
Afaik braucht 'ne boolean in C weniger Speicherplatz als 'ne int. Sonst wäre der Typ boolean schwachsinnig.
Ach ne, warte, das war C++, in C gibt's keine booleans, oder?
@ Dingsi:
Afaik braucht 'ne boolean in C weniger Speicherplatz als 'ne int. Sonst wäre der Typ boolean schwachsinnig.
Ach ne, warte, das war C++, in C gibt's keine booleans, oder?1. Kann auch ein char sein, keine Ahnung.
2. Kann sein, keine Ahnung. Man kann sich den Typen aber recht einfach über ein #define bool char und #define true 1 und #define false 0 selber machen. Wie gesagt, der Typ macht auch keinen Sinn, denn die kleinste Einheit die man technisch in einem Computer ansprechen kann ist ein Byte (= char). Ja, man kann über Bit-Operationen auch an die einzelnen Bit eines Bytes, aber das wär Performanceverschwendung. Da ist es einfacher einfach die 7 Bit zu verschwenden.
ich denke, der einzige Unterschied, der zwischen den Anweisungen besteht, wird in der Umsetzung in Maschienencode liegen. Wobei ich mir denke, dass selbst da eine gute optimierung gleiche Ergebnisse liefern wird ^^
Calamity- Jade
22.12.2005, 18:41
Dankeschön, jetzt habe ich alles verstanden, glaube ich.^^
Ich werde mich dann in nächster Zeit mit ein paar Tutorials beschäftigen, damit ich damit in Zukunft mehr anfangen kann.;)
Calamity- Jade
23.12.2005, 16:21
Oh, eine Frage hätte ich noch:
Ist es schlussendlich egal, welchen Code man benutzt oder hat man durch die Benutzung eines bestimmten davon irgendwelche Vorteile? Das können auch ganz geringe sein.^^
Ist irgendeiner davon besser/effektiver als die anderen?
Sorry für den Doppelpost.^^
Ich denke in diesem speziellen Fall ist
c = (a==b);am kürzesten und schnellsten. Wenn du c nur irgendetwas zuweisen willst (außer 0 und 1), würde ich den Trinäroperator benutzen
c = (a==b) ? 5 : 8;Wobei manche Leute das auch zu unübersichtlich finden und in solchen Fällen gleich zu einem vollständigen if() greifen. Das mache ich persönlich erst, wenn ich unterschiedlichen Code ausführen will.
if(a==b)
{
doSomething(c);
}
else
{
doOtherthing(a, b);
}
Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.
Edit: oh, hast du ja geschrieben, habs überlesen
Genau.
#define TRUE 1
#define FALSE 0
;)
Calamity- Jade
08.01.2006, 15:22
Vielen Dank für eure Hilfe!^_^
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.