detewe89 hat geschrieben:^ stellt dabei ein XOR dar (das es ja bei C gar nicht gab).
Wer die Mär wohl in die Welt gesetzt hat... sowas erzählte damals einer meiner Profs auch und der hat sich auch geirrt.
PS: Erzählt man euch euch auch noch, dass Java diese gefährlichen Zeiger aus C/C++ nicht mehr hat?
detewe89 hat geschrieben:Wir haben "Informatik" als reine Java-Vorlesung, also leider ohne wirklichen theoretischen Boden...

Im ersten Programmbeispiel (Berechnung der ersten 1000 Primzahlen) hat der Prof einmal den Operator & und einmal den Operator && genommen - beide Male für logische Operationen, bei denen ein Boole'scher Ausdruck herauskommt. Auf Unterschiede hat er uns nicht hingewiesen
Bitte geh nicht davon aus, dass Du im Studium programmieren beigebracht bekommst. Sowas wird in der Regel vorausgesetzt, auch dann, wenn man zugesichert bekommt, dass man keine Vorkenntnisse braucht. Das kann man sich ja mal an einem Wochenende nebenher aneignen.
Die Verwendung von & bei logischen Werten ist rechnerisch korrekt, aber semantisch falsch. Nur weil ein Programm korrekte Ergebnisse liefert, heißt das nicht, dass es korrekt ist. Nicht jeder Wert, der logisch interpretiert wird/werden soll, ist auch logisch.
detewe89 hat geschrieben:Ich liste mal die beiden Beispiele auf
Code: Alles auswählen
// 1. Beispiel while (!found && index < primes.length)
Korrekt.
detewe89 hat geschrieben:Code: Alles auswählen
// 2. Beispiel while (notDivisible & (divisor < currentNum)) {
Der Compiler schluckt's.
Und es liefert auch das korrekte Ergebnis, denn true(1) & true(1) ergibt true(1) - bei beiden Operatoren.
Trotzdem ist es semantisch falsch, wenn Du bei mir programmieren lernen würdest, würde ich Dir das Programm als falsch zurückgeben.
Beispiel:
Code: Alles auswählen
int a = 2;
if( a && (a < 3) ) printf( "&& ergibt wahr\n" );
if( a & (a < 3) ) printf( "& ergibt wahr\n" );
Die Ausgabe ergibt "&& ergibt wahr", aber die Zeile "& ergibt wahr" fehlt!
a ist 2, (a < 3) ist true, also 1.
Hier ergibt sich der semantische Unterschied zwischen && und &.
detewe89 hat geschrieben:Mir ist nicht klar wozu der & - Operator überhaupt für logische Operatoren definiert sein muss... Die ShortCircuit-Methode ist doch in jedem Fall ausreichend...
Und && ist hier auch einzig und allein korrekt. Du willst nicht bitweise verknüpfen, Du willst eine logische Aussage treffen.
Schreibst Du in das Programm dann '&' rein, bedeutet der Algorithmus etwas anderes und
kann zufälligerweise das gewünschte Ergebnis liefern - er muss aber nicht. Darum würde aufgrund der Diskrepanz zwischen dem was dein Prof schreiben will (&&) und dem, was er geschrieben hat (&) das Programm von mir als richtig abgelehnt werden.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.