2015-09-18 15 views
6

Próbuję przekonwertować kod Java na C# i działa on bezbłędnie do tej pory, ale napotkałem problem z operatorem ^. W języku C# Console.WriteLine(127^0xffffffff); drukuje 4294967168 natomiast w języku Java System.out.println(127^0xffffffff); drukuje -128. Rozglądałem się, aby zobaczyć, czy jest coś innego, czego potrzebuję, ale nie natknąłem się na nic.C# bitowo XOR (^) w porównaniu do Java bitowo XOR (^)

+0

Zapomniałem dodać, muszę go wydrukować -128. – Orion

+2

W Javie operandy są promowane do typu 'int', a wynikiem jest' int'. W języku C# operandy są promowane do 'uint', a wynikiem jest' uint'. Odpowiedni odlew powinien się tym zająć. –

Odpowiedz

8

C# obsługuje podpisał jak również niepodpisanych liczb całkowitych (Java obsługuje podpisana tylko nich):

unchecked { 
    // you want signed int 
    int result = (int) (127^0xffffffff); 

    Console.WriteLine(result); 
    } 
+2

Prawdziwy problem polega na tym, że 0xffffffff nie może być reprezentowany jako liczba dodatnia w podpisanym int, co powoduje, że jest interpretowane jako unsigned int. '0xff' będzie interpretowane jako int i niepodpisane int. – Voo

+0

Ah! Głupi ja. Dziękuję Ci bardzo! Wybieram to jako odpowiedź, gdy pozwala mi to zająć około 6 minut. – Orion

Powiązane problemy