2012-11-12 20 views
6

Czy ktoś może mi wyjaśnić dlaczego .net oblicza te różnie JavaVB .NET obliczania inaczej Java

Równanie

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

Java oblicza go jako

151 

.Net oblicza się jako

Mój problem polega na tym, że potrzebuję .Net, aby obliczyć to samo, co w Javie, ponieważ przeportowuję się przez funkcję odszyfrowywania, a jeśli oblicza ona inaczej, odszyfrowanie nie będzie poprawne.

Każda pomoc zostanie doceniona.

--Update--

Dzięki chłopaki, XOR było to, co powinno I był używany. Dodatkowo trzeba obejść Javę, nie rzucając wyjątku, gdy liczba całkowita jest zbyt duża.

Xor daje wynik -3121757145

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

połączeniu z odpowiedzią z tego linku znalazłem - Java sum 2 negative numbers. Daje taki sam wynik jak Java

-3121757145 + 2^32 =151 
+1

w Javie, '^' 'jest operator XOR'. Nie jestem zaznajomiony z VB, ale niektóre wyszukiwania Google zasugerowały, że 'Xor' jest operatorem xor, a'^'służy do potęgowania w VB. Czy to może być problem? – irrelephant

Odpowiedz

3

Sprawdziłem tabeli pierwszeństwa operatora dla Java i Visual Basic, są takie same w odniesieniu do operatorów w wyrażeniu. Więc nie jest to problem z priorytetem.

Należy pamiętać jednak, w Visual Basic ^ jest operatorem dla exponentiation, natomiast Xor jest operatorem dla exclusive or. Różni się od Javy, która używa operatora ^ jako wyłącznego lub nie ma operatora dla potęgowania. Wszystkie inne operatory w wyrażeniu są takie same w obu językach:

Nie mogę stwierdzić z kodu, czy fragment kodu jest w Javie, czy ten w Visual Basic - Zgaduję, że jest w Javie. Jeśli tak jest, to całkiem możliwe, że pomyliłeś wyłączne lub; spróbuj wymienić ^ z Xor w kodu Visual Basic i zobaczyć, czy to rozwiąże problem:

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

Dzięki Oscar. Kod jest taki sam zarówno w Javie, jak i .Net. Wracam do równania w oknie "Watch" obu IDE, gdy są w trybie debugowania. Próbowałem użyć "Xor", a wynik to -3121757145. Dla mnie wygląda na to, że w Javie dzieje się coś niedobrego, ponieważ wynikiem jest liczba dodatnia. – Seb

Powiązane problemy