2015-09-18 22 views
6

Tôi đang cố gắng chuyển đổi một số mã java thành C# và nó hoạt động hoàn hảo cho đến nay nhưng tôi đã gặp phải vấn đề với toán tử ^. Trong C# Console.WriteLine(127^0xffffffff); in 4294967168 trong khi trong Java System.out.println(127^0xffffffff); bản in -128. Tôi đã nhìn xung quanh để xem có cái gì khác mà tôi cần phải sử dụng thay vào đó nhưng tôi đã không đi qua bất cứ điều gì.C# bitwise XOR (^) so với Java bitwise XOR (^)

+0

Quên để thêm, tôi cần nó để in -128. – Orion

+2

Trong Java, các toán hạng được khuyến khích gõ 'int', và kết quả là một' int'. Trong C# các toán hạng được nâng lên 'uint', và kết quả là' uint'. Đúc thích hợp nên chăm sóc này. –

Trả lời

8

C# hỗ trợ cũng như unsigned số nguyên (Java hỗ trợ ký chỉ những người thân):

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

    Console.WriteLine(result); 
    } 
+2

Vấn đề thực sự là 0xffffffff không thể được biểu diễn như một số dương trong một int đã ký, sau đó làm cho nó được hiểu là int không dấu. '0xff' sẽ được hiểu là int int và not unsigned. – Voo

+0

Ah! Tôi ngớ ngẩn quá. Cảm ơn nhiều! Tôi sẽ chọn câu trả lời này khi câu trả lời cho phép tôi trong khoảng 6 phút. – Orion