`java (0 % 2 != 0) == false`
Den Teil, den ich immer stecken geblieben ist
boolean(0 % 2 !=0)
== false. Ich meine, wenn 2 geht in 0 0-mal dann der Rest wäre 2 und 2 nicht gleich 0. Es sollte also wahr sein. Noch nicht, aber wenn ich den boolean in mein java-Programm es ist und behandeln Sie es als falsch. Wer weiß, warum?
Die einzige logische Antwort kann ich wickeln Sie meinen Kopf herum, ist, dass vielleicht ganzen zahlen gehen in 0 und eine unendliche Anzahl von Zeiten und so erkannt werden als falsch, anyone?
Ich bin sicher, es ist keine Codierung Fehler, kopierte ich diese direkt aus meinem Buch, es ist auch auf die mehrfach verwiesen wird in meinem Vortrag.
Das ist ... nicht das, was
Ganze zahlen gehen nicht in 0 eine unendliche Anzahl von Zeiten, aber 0 mal. Ich denke, in Ihrem letzten Anweisung die Sie sich vorstellen können 2/0 ("0 geht in 2 eine unendliche Anzahl von Zeiten") anstelle von 0/2.
Das ist ... nicht das, was
%
bedeutet.Ganze zahlen gehen nicht in 0 eine unendliche Anzahl von Zeiten, aber 0 mal. Ich denke, in Ihrem letzten Anweisung die Sie sich vorstellen können 2/0 ("0 geht in 2 eine unendliche Anzahl von Zeiten") anstelle von 0/2.
InformationsquelleAutor Michael | 2012-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Schritte:
0 % 2
ausgewertet0
.0 != 0
ausgewertetfalse
.Zu erarbeiten, ist der erste Schritt, der JLS definiert die
%
Betreiber etwa so:Den Rest der Division
0
durch2
ist0
und nicht2
wie Sie scheinen zu denken.InformationsquelleAutor NPE
0%2 = 0, da 0/2 = 0 und reminder-0, oder 0*2+Erinnerung = 0.
Euch nur missverstanden-Modul.
InformationsquelleAutor miks
%
gibt den Rest nach der Teilung. Null geteilt durch nichts (außer sich selbst!) ist null, so dort ist kein Rest.Daher
0 % 2
ist0
.Dieses moderne Mathematik ist so verwirrend 🙂
Ha Ha, guter Fang 🙂 Behoben!
InformationsquelleAutor Matt Lacey
Ich denke, Sie mischen sich 0%2 2%0 (das ist unmöglich). 0%n ist immer gleich 0.
Ok, let ' s sezieren,...
1)
0 % 2
modulo ist der rest der finite-division. Zum Beispiel 10%3 ist der rest von 10/3. 10/3 ist 3+⅓. So der rest ist 1.
0%2 ist der rest von 0/2. 0/2=0, gibt es keinen rest, also 0%2=0.
2)
0 % 2 != 0
Es bedeutet 0%2 ist anders als 0 ist. Wir wissen jetzt, es ist falsch.
3)
boolean(0 % 2 != 0)
Es ist einfach Gießen. Sie werfen das Ergebnis in ein Boolean. Statt nur einige falschen Annahme aus, es wird die Java-Wert
false
.4)
boolean(0 % 2 != 0) == false
Den
==
bedeutet, dass es ist ein test hier. Die Prüfung kann vereinfacht werden (wie oben gezeigt) alsfalse == false
. Istfalse
gleichfalse
? Ja, es ist. Das Ergebnis ist danntrue
.InformationsquelleAutor SteeveDroz
ist es nicht
2 goes into 0
aber0 goes into 2
, so das Ergebnis der Abteilung ist 0 und die Erinnerung ist 0.InformationsquelleAutor adranale
Es zu tun hat mit der Rangfolge, das ist die Reihenfolge, mit der Operatoren ausgewertet werden, indem die Java Interpret.
Sehen hier für die docs. Eine nützliche Abkürzung ist BUDMASRELCA - BSchläger, Unary, Div-Multiplication (tatsächlich multiplikativ, da es modulo), Eineddittion-Subtraction,Relational,EQualität,Logical,Conditional(ternäre),Einessignment.
Ich habe verpasst, Bitweise Operatoren, aber Sie könnten zusammengefasst werden unter Logischen und Sie haben Vorrang vor normalen logischen Operatoren.
0 % 2 !=0 bewertet wird als 0%2 (multiplikativ), und dann erste Ergebnis 0 ausgewertet != 0. (Gleichheit)
Intern, Compiler bauen ein binäres expression tree zur Darstellung der Reihenfolge wie unten gezeigt, für Ihren Fall, die Verwendung von Operatoren wie Wurzeln und Blätter, die als Werte oder weitere Betreiber (im rekursiven Fall). So der sub-Bäume, die Operatoren ausgewertet werden müssen, bevor das root-operator ausgewertet werden können, mit dem Wert, den es hinterlässt.
InformationsquelleAutor arviman