Gibt es einen Unterschied zwischen den Java- und C ++ - Operatoren?

8

Wenn Sie primitive numerische Typen von Java plus Boolean verwenden und sie mit C ++ äquivalenten Typen vergleichen, gibt es einen Unterschied, was die Operatoren betrifft, wie Präzedenzregeln oder was die Bitmanipulationsoperatoren tun? Oder die Wirkung von Klammern?

Anders gefragt: Wenn ich einen Java-Ausdruck nehme und versuche, ihn in C ++ zu kompilieren und auszuführen, würde er dann immer kompilieren und immer das gleiche Ergebnis liefern?

    
Sebastien Diot 08.07.2011, 11:41
quelle

6 Antworten

10
  • Für einen Ausdruck wie:

    %Vor%

    In Java ist die Bewertungsreihenfolge gut definiert (von links nach rechts). C ++ gibt nicht an, ob foo() oder bar() zuerst ausgewertet wird.

  • Zeug wie:

    %Vor%

    ist in C ++ nicht definiert, aber in Java wieder gut definiert.

  • In C ++ ist das Ausführen von Rechtsverschiebungen bei negativen Zahlen implementierungsdefiniert / undefiniert; während in Java ist es gut definiert.

  • Auch in C ++ sind die Operatoren & , | und ^ rein bitweise Operatoren. In Java können sie je nach Kontext bitweise oder logische Operatoren sein.

Oliver Charlesworth 08.07.2011, 11:49
quelle
5

Java gibt mehr über die Reihenfolge der Auswertung von Ausdrücken als C ++ an, und C ++ sagt, dass Sie undefiniertes Verhalten erhalten, wenn any der rechtlichen Auswertungsreihenfolge Ihres Ausdrucks ein Objekt zweimal zwischen Sequenzpunkten ändert.

Also ist i++ + i++ in Java gut definiert, hat aber in C ++ undefiniertes Verhalten (keine Diagnose erforderlich). Daher können Sie nicht blind Ausdrücke von Java nach C ++ kopieren.

Bei bitweisen Operatoren gibt Java die Zweierkomplement-Darstellung negativer Zahlen an, während C ++ dies nicht tut. Nicht, dass Sie wahrscheinlich auf eine andere Repräsentation in C ++ stoßen, aber wenn Sie dies tun würden, würden Sie zum Beispiel feststellen, dass -2 | 1 immer -1 in Java ist, aber -2 in C ++ Implementierung mit 1s Ergänzung.

    
Steve Jessop 08.07.2011 11:50
quelle
2

Ich glaube, dass die Operatorpriorität zwischen C ++ und Java konsistent ist, und vorausgesetzt, der Ausdruck ist deterministisch, dann sollte er auf die gleiche Weise ausgewertet werden.

    
Lazarus 08.07.2011 11:44
quelle
1
___ qstnhdr ___ Gibt es einen Unterschied zwischen den Java- und C ++ - Operatoren? ___ answer6623917 ___

Ich glaube, dass die Operatorpriorität zwischen C ++ und Java konsistent ist, und vorausgesetzt, der Ausdruck ist deterministisch, dann sollte er auf die gleiche Weise ausgewertet werden.

    
___ answer6623927 ___

Es muss einen großen Unterschied geben, denn in Java werden fast alle numerischen Typen immer signiert. Lesen Sie Java Puzzlers Buch und Java Language Specification, um alle feinen Unterschiede zu verstehen.

    
___ qstntxt ___

Wenn Sie primitive numerische Typen von Java plus Boolean verwenden und sie mit C ++ äquivalenten Typen vergleichen, gibt es einen Unterschied, was die Operatoren betrifft, wie Präzedenzregeln oder was die Bitmanipulationsoperatoren tun? Oder die Wirkung von Klammern?

Anders gefragt: Wenn ich einen Java-Ausdruck nehme und versuche, ihn in C ++ zu kompilieren und auszuführen, würde er dann immer kompilieren und immer das gleiche Ergebnis liefern?

    
___ antwort6623990 ___

Der Operator für die Verschiebung nach rechts >> ist anders. In Java ist es immer eine arithmetische Verschiebung, d. H. Es kopiert das Vorzeichenbit in das am weitesten links liegende Bit, während es in C ++ in der Implementierung definiert ist, ob es eine arithmetische oder logische Verschiebung ist. Sie können eine logische Verschiebung in Java mit >>> erhalten, die in C ++ nicht existiert.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer25951459 ___

Siehe Folgendes:

  

int a = 0;

     

int b = (a ++) + (a);

Wenn Sie %code% drucken, gibt es %code% in C ++ aus, während %code% in Java

angezeigt wird     
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer6623981 ___
  • Für einen Ausdruck wie:

    %Vor%

    In Java ist die Bewertungsreihenfolge gut definiert (von links nach rechts). C ++ gibt nicht an, ob %code% oder %code% zuerst ausgewertet wird.

  • Zeug wie:

    %Vor%

    ist in C ++ nicht definiert, aber in Java wieder gut definiert.

  • In C ++ ist das Ausführen von Rechtsverschiebungen bei negativen Zahlen implementierungsdefiniert / undefiniert; während in Java ist es gut definiert.

  • Auch in C ++ sind die Operatoren %code% , %code% und %code% rein bitweise Operatoren. In Java können sie je nach Kontext bitweise oder logische Operatoren sein.

___ tag123operators ___ Operatoren sind Symbole, die in fast allen Programmier- und Codierungssprachen vorkommen, um Berechnungen und Vergleiche von Daten durchzuführen. ___ answer6623998 ___

Java gibt mehr über die Reihenfolge der Auswertung von Ausdrücken als C ++ an, und C ++ sagt, dass Sie undefiniertes Verhalten erhalten, wenn any der rechtlichen Auswertungsreihenfolge Ihres Ausdrucks ein Objekt zweimal zwischen Sequenzpunkten ändert.

Also ist %code% in Java gut definiert, hat aber in C ++ undefiniertes Verhalten (keine Diagnose erforderlich). Daher können Sie nicht blind Ausdrücke von Java nach C ++ kopieren.

Bei bitweisen Operatoren gibt Java die Zweierkomplement-Darstellung negativer Zahlen an, während C ++ dies nicht tut. Nicht, dass Sie wahrscheinlich auf eine andere Repräsentation in C ++ stoßen, aber wenn Sie dies tun würden, würden Sie zum Beispiel feststellen, dass %code% immer %code% in Java ist, aber %code% in C ++ Implementierung mit 1s Ergänzung.

    
___
Graham Borland 08.07.2011 11:49
quelle
0

Es muss einen großen Unterschied geben, denn in Java werden fast alle numerischen Typen immer signiert. Lesen Sie Java Puzzlers Buch und Java Language Specification, um alle feinen Unterschiede zu verstehen.

    
Victor Sorokin 08.07.2011 11:45
quelle
0

Siehe Folgendes:

  

int a = 0;

     

int b = (a ++) + (a);

Wenn Sie b drucken, gibt es 0 in C ++ aus, während 1 in Java

angezeigt wird     
Dhaval Kapil 20.09.2014 17:28
quelle

Tags und Links