2012-11-12 11 views
6

Berechnung Kann mir jemand erklären, warum .net ist diese unterschiedlich auf JavaVB .NET unterschiedlich auf Java

Die Gleichung

(-1646490243 << 4) + 3333^-1646490243 + -957401312^(-1646490243 >> 5) + 4 

Java berechnet als

151 

.Net Berechnung berechnet als

-574040108 

Mein Problem ist, dass ich .Net dasselbe wie Java berechnen muss, da ich über eine Entschlüsselungsfunktion portiere, und wenn es anders berechnet, wird die Entschlüsselung nicht richtig sein.

Jede Hilfe wäre willkommen.

--Update--

Danke Jungs, war Xor, was ich mit von sollte. Außerdem muss eine Umgehung durchgeführt werden Java wird nicht ausgelöst, wenn eine Integer-Zahl zu groß ist.

Xor gibt ein Ergebnis von -3121757145

(-1646490243 << 4) + 3333 Xor -1646490243 + -957401312 Xor (-1646490243 >> 5) + 4 

dies über diesen Link mit der Antwort Kombinieren ich gefunden - Java sum 2 negative numbers. Gibt das gleiche Ergebnis wie Java

-3121757145 + 2^32 =151 
+1

In Java '^' ist der 'XOR' Operator. Ich bin nicht mit VB vertraut, aber einige Google-Suchanfragen haben angedeutet, dass 'Xor' der xor-Operator ist und'^'für die Potenzierung in VB. Könnte das das Problem sein? – irrelephant

Antwort

3

ich den Bediener Präzedenztabelle geprüft Java und Visual Basic, sind sie das gleiche in Bezug auf die Operatoren im Ausdruck. Es ist also kein vorrangiges Problem.

Seien Sie sich aber bewusst, in Visual Basic ^ der Betreiber für exponentiation ist, während Xor der Betreiber für exclusive or ist. Das ist anders als bei Java, das den Operator ^ als exklusiven Operator verwendet und keinen Operator für die Exponentiation besitzt. Alle anderen Operatoren im Ausdruck sind in beiden Sprachen gleich

Ich kann nicht aus dem Code ersehen, ob das Snippet das in Java oder das in Visual Basic ist - ich vermute, ist in Java. Wenn das der Fall ist, ist es gut möglich, dass Sie das exklusive oder verwirrt haben. versuchen ^ mit Xor in Visual Basic-Code zu ersetzen und sehen, ob das das Problem behebt:

(-1646490243 << 4) + 3333 Xor -1646490243 + -957401312 Xor (-1646490243 >> 5) + 4 
+0

Danke Oscar. Der Code ist in Java und .NET identisch. Ich lasse die Gleichung im "Watch" -Fenster beider IDEs fallen, während sie sich im Debug-Modus befinden. Ich versuchte mit "Xor" und das Ergebnis ist -3121757145. Mir scheint, dass etwas in Java schief läuft, da das Ergebnis eine positive Zahl ist. – Seb